diff --git a/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts b/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts new file mode 100644 index 00000000000..ae3089036a6 --- /dev/null +++ b/.eslintplugin/code-ensure-no-disposables-leak-in-test.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 * as eslint from 'eslint'; +import { Node } from 'estree'; + +export = new class EnsureNoDisposablesAreLeakedInTestSuite implements eslint.Rule.RuleModule { + + readonly meta: eslint.Rule.RuleMetaData = { + type: 'problem', + messages: { + ensure: 'Suites should include a call to `ensureNoDisposablesAreLeakedInTestSuite()` to ensure no disposables are leaked in tests.' + } + }; + + create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener { + const config = <{ exclude: string[] }>context.options[0]; + + const needle = context.getFilename().replace(/\\/g, '/'); + if (config.exclude.some((e) => needle.endsWith(e))) { + return {}; + } + + return { + [`Program > ExpressionStatement > CallExpression[callee.name='suite']`]: (node: Node) => { + const src = context.getSourceCode().getText(node) + if (!src.includes('ensureNoDisposablesAreLeakedInTestSuite(')) { + context.report({ + node, + messageId: 'ensure', + }); + } + }, + }; + } +}; diff --git a/.eslintrc.json b/.eslintrc.json index fd88130a1e8..d6d14e5d43b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -136,6 +136,226 @@ ] } }, + { + "files": [ + "src/vs/**/*.test.ts" + ], + "rules": { + "local/code-ensure-no-disposables-leak-in-test": [ + "warn", + { + // Files should (only) be removed from the list they adopt the leak detector + "exclude": [ + "src/vs/base/parts/sandbox/test/electron-sandbox/globals.test.ts", + "src/vs/base/test/browser/browser.test.ts", + "src/vs/base/test/browser/comparers.test.ts", + "src/vs/base/test/browser/dom.test.ts", + "src/vs/base/test/browser/formattedTextRenderer.test.ts", + "src/vs/base/test/browser/hash.test.ts", + "src/vs/base/test/browser/iconLabels.test.ts", + "src/vs/base/test/browser/indexedDB.test.ts", + "src/vs/base/test/browser/ui/contextview/contextview.test.ts", + "src/vs/base/test/browser/ui/menu/menubar.test.ts", + "src/vs/base/test/browser/ui/scrollbar/scrollableElement.test.ts", + "src/vs/base/test/browser/ui/scrollbar/scrollbarState.test.ts", + "src/vs/base/test/common/arrays.test.ts", + "src/vs/base/test/common/arraysFind.test.ts", + "src/vs/base/test/common/assert.test.ts", + "src/vs/base/test/common/cache.test.ts", + "src/vs/base/test/common/charCode.test.ts", + "src/vs/base/test/common/collections.test.ts", + "src/vs/base/test/common/color.test.ts", + "src/vs/base/test/common/console.test.ts", + "src/vs/base/test/common/decorators.test.ts", + "src/vs/base/test/common/diff/diff.test.ts", + "src/vs/base/test/common/errors.test.ts", + "src/vs/base/test/common/filters.perf.test.ts", + "src/vs/base/test/common/filters.test.ts", + "src/vs/base/test/common/iconLabels.test.ts", + "src/vs/base/test/common/iterator.test.ts", + "src/vs/base/test/common/json.test.ts", + "src/vs/base/test/common/jsonEdit.test.ts", + "src/vs/base/test/common/jsonFormatter.test.ts", + "src/vs/base/test/common/keybindings.test.ts", + "src/vs/base/test/common/keyCodes.test.ts", + "src/vs/base/test/common/lazy.test.ts", + "src/vs/base/test/common/linkedList.test.ts", + "src/vs/base/test/common/linkedText.test.ts", + "src/vs/base/test/common/map.test.ts", + "src/vs/base/test/common/markdownString.test.ts", + "src/vs/base/test/common/marshalling.test.ts", + "src/vs/base/test/common/mime.test.ts", + "src/vs/base/test/common/naturalLanguage/korean.test.ts", + "src/vs/base/test/common/network.test.ts", + "src/vs/base/test/common/normalization.test.ts", + "src/vs/base/test/common/objects.test.ts", + "src/vs/base/test/common/observable.test.ts", + "src/vs/base/test/common/path.test.ts", + "src/vs/base/test/common/prefixTree.test.ts", + "src/vs/base/test/common/resources.test.ts", + "src/vs/base/test/common/resourceTree.test.ts", + "src/vs/base/test/common/scrollable.test.ts", + "src/vs/base/test/common/skipList.test.ts", + "src/vs/base/test/common/strings.test.ts", + "src/vs/base/test/common/stripComments.test.ts", + "src/vs/base/test/common/ternarySearchtree.test.ts", + "src/vs/base/test/common/tfIdf.test.ts", + "src/vs/base/test/common/types.test.ts", + "src/vs/base/test/common/uri.test.ts", + "src/vs/base/test/common/uuid.test.ts", + "src/vs/base/test/node/crypto.test.ts", + "src/vs/base/test/node/css.build.test.ts", + "src/vs/base/test/node/id.test.ts", + "src/vs/base/test/node/nodeStreams.test.ts", + "src/vs/base/test/node/port.test.ts", + "src/vs/base/test/node/powershell.test.ts", + "src/vs/base/test/node/snapshot.test.ts", + "src/vs/base/test/node/unc.test.ts", + "src/vs/code/test/electron-sandbox/issue/testReporterModel.test.ts", + "src/vs/editor/contrib/codeAction/test/browser/codeActionKeybindingResolver.test.ts", + "src/vs/editor/contrib/codeAction/test/browser/codeActionModel.test.ts", + "src/vs/editor/contrib/dropOrPasteInto/test/browser/editSort.test.ts", + "src/vs/editor/contrib/folding/test/browser/foldingModel.test.ts", + "src/vs/editor/contrib/folding/test/browser/foldingRanges.test.ts", + "src/vs/editor/contrib/folding/test/browser/indentFold.test.ts", + "src/vs/editor/contrib/folding/test/browser/indentRangeProvider.test.ts", + "src/vs/editor/contrib/gotoSymbol/test/browser/referencesModel.test.ts", + "src/vs/editor/contrib/smartSelect/test/browser/smartSelect.test.ts", + "src/vs/editor/contrib/snippet/test/browser/snippetParser.test.ts", + "src/vs/editor/contrib/snippet/test/browser/snippetSession.test.ts", + "src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts", + "src/vs/editor/contrib/suggest/test/browser/completionModel.test.ts", + "src/vs/editor/contrib/suggest/test/browser/suggestMemory.test.ts", + "src/vs/editor/test/common/services/languageService.test.ts", + "src/vs/editor/test/node/classification/typescript.test.ts", + "src/vs/editor/test/node/diffing/defaultLinesDiffComputer.test.ts", + "src/vs/editor/test/node/diffing/fixtures.test.ts", + "src/vs/platform/configuration/test/common/configuration.test.ts", + "src/vs/platform/configuration/test/common/configurationModels.test.ts", + "src/vs/platform/configuration/test/common/configurationRegistry.test.ts", + "src/vs/platform/contextkey/test/common/contextkey.test.ts", + "src/vs/platform/contextkey/test/common/parser.test.ts", + "src/vs/platform/contextkey/test/common/scanner.test.ts", + "src/vs/platform/dialogs/test/common/dialog.test.ts", + "src/vs/platform/environment/test/node/argv.test.ts", + "src/vs/platform/environment/test/node/userDataPath.test.ts", + "src/vs/platform/extensionManagement/test/common/configRemotes.test.ts", + "src/vs/platform/extensionManagement/test/common/extensionManagement.test.ts", + "src/vs/platform/extensions/test/common/extensionValidator.test.ts", + "src/vs/platform/externalTerminal/electron-main/externalTerminalService.test.ts", + "src/vs/platform/instantiation/test/common/graph.test.ts", + "src/vs/platform/instantiation/test/common/instantiationService.test.ts", + "src/vs/platform/keybinding/test/common/abstractKeybindingService.test.ts", + "src/vs/platform/keybinding/test/common/keybindingLabels.test.ts", + "src/vs/platform/keybinding/test/common/keybindingResolver.test.ts", + "src/vs/platform/markers/test/common/markerService.test.ts", + "src/vs/platform/opener/test/common/opener.test.ts", + "src/vs/platform/progress/test/common/progress.test.ts", + "src/vs/platform/registry/test/common/platform.test.ts", + "src/vs/platform/remote/test/common/remoteHosts.test.ts", + "src/vs/platform/telemetry/test/browser/1dsAppender.test.ts", + "src/vs/platform/telemetry/test/browser/telemetryService.test.ts", + "src/vs/platform/telemetry/test/common/telemetryLogAppender.test.ts", + "src/vs/platform/undoRedo/test/common/undoRedoService.test.ts", + "src/vs/platform/userDataSync/test/common/extensionsMerge.test.ts", + "src/vs/platform/userDataSync/test/common/globalStateMerge.test.ts", + "src/vs/platform/userDataSync/test/common/settingsMerge.test.ts", + "src/vs/platform/userDataSync/test/common/snippetsMerge.test.ts", + "src/vs/platform/userDataSync/test/common/userDataProfilesManifestMerge.test.ts", + "src/vs/platform/workspace/test/common/workspace.test.ts", + "src/vs/platform/workspaces/test/common/workspaces.test.ts", + "src/vs/platform/workspaces/test/electron-main/workspaces.test.ts", + "src/vs/server/test/node/serverConnectionToken.test.ts", + "src/vs/workbench/api/test/browser/extHost.api.impl.test.ts", + "src/vs/workbench/api/test/browser/extHostApiCommands.test.ts", + "src/vs/workbench/api/test/browser/extHostBulkEdits.test.ts", + "src/vs/workbench/api/test/browser/extHostCommands.test.ts", + "src/vs/workbench/api/test/browser/extHostDocumentSaveParticipant.test.ts", + "src/vs/workbench/api/test/browser/extHostMessagerService.test.ts", + "src/vs/workbench/api/test/browser/extHostTelemetry.test.ts", + "src/vs/workbench/api/test/browser/extHostTextEditor.test.ts", + "src/vs/workbench/api/test/browser/extHostTypeConverter.test.ts", + "src/vs/workbench/api/test/browser/extHostTypes.test.ts", + "src/vs/workbench/api/test/browser/extHostWorkspace.test.ts", + "src/vs/workbench/api/test/browser/mainThreadConfiguration.test.ts", + "src/vs/workbench/api/test/browser/mainThreadDocuments.test.ts", + "src/vs/workbench/api/test/common/extensionHostMain.test.ts", + "src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts", + "src/vs/workbench/api/test/node/extHostTunnelService.test.ts", + "src/vs/workbench/contrib/bulkEdit/test/browser/bulkCellEdits.test.ts", + "src/vs/workbench/contrib/chat/test/common/chatWordCounter.test.ts", + "src/vs/workbench/contrib/debug/test/browser/baseDebugView.test.ts", + "src/vs/workbench/contrib/debug/test/browser/breakpoints.test.ts", + "src/vs/workbench/contrib/debug/test/browser/callStack.test.ts", + "src/vs/workbench/contrib/debug/test/browser/debugHover.test.ts", + "src/vs/workbench/contrib/debug/test/browser/repl.test.ts", + "src/vs/workbench/contrib/debug/test/common/debugModel.test.ts", + "src/vs/workbench/contrib/debug/test/node/debugger.test.ts", + "src/vs/workbench/contrib/debug/test/node/streamDebugAdapter.test.ts", + "src/vs/workbench/contrib/debug/test/node/terminals.test.ts", + "src/vs/workbench/contrib/editSessions/test/browser/editSessions.test.ts", + "src/vs/workbench/contrib/extensions/test/common/extensionQuery.test.ts", + "src/vs/workbench/contrib/extensions/test/electron-sandbox/extension.test.ts", + "src/vs/workbench/contrib/files/test/browser/explorerFileNestingTrie.test.ts", + "src/vs/workbench/contrib/files/test/browser/explorerModel.test.ts", + "src/vs/workbench/contrib/files/test/browser/explorerView.test.ts", + "src/vs/workbench/contrib/files/test/browser/fileActions.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/cellDnd.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/contrib/contributedStatusBarItemController.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/contrib/executionStatusBarItem.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/contrib/layoutActions.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/contrib/outputCopyTests.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/notebookBrowser.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/notebookExecutionService.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/notebookExecutionStateService.test.ts", + "src/vs/workbench/contrib/notebook/test/browser/notebookTextModel.test.ts", + "src/vs/workbench/contrib/search/test/common/cacheState.test.ts", + "src/vs/workbench/contrib/search/test/common/extractRange.test.ts", + "src/vs/workbench/contrib/snippets/test/browser/snippetFile.test.ts", + "src/vs/workbench/contrib/snippets/test/browser/snippetsRegistry.test.ts", + "src/vs/workbench/contrib/snippets/test/browser/snippetsRewrite.test.ts", + "src/vs/workbench/contrib/tags/test/node/workspaceTags.test.ts", + "src/vs/workbench/contrib/tasks/test/common/problemMatcher.test.ts", + "src/vs/workbench/contrib/tasks/test/common/taskConfiguration.test.ts", + "src/vs/workbench/contrib/terminal/test/browser/terminalActions.test.ts", + "src/vs/workbench/contrib/themes/test/node/colorRegistryExport.test.ts", + "src/vs/workbench/contrib/url/test/browser/trustedDomains.test.ts", + "src/vs/workbench/contrib/welcomeGettingStarted/test/browser/gettingStartedMarkdownRenderer.test.ts", + "src/vs/workbench/services/commands/test/common/commandService.test.ts", + "src/vs/workbench/services/configuration/test/common/configurationModels.test.ts", + "src/vs/workbench/services/configurationResolver/test/electron-sandbox/configurationResolverService.test.ts", + "src/vs/workbench/services/dialogs/test/electron-sandbox/fileDialogService.test.ts", + "src/vs/workbench/services/editor/test/browser/editorResolverService.test.ts", + "src/vs/workbench/services/extensions/test/common/extensionDescriptionRegistry.test.ts", + "src/vs/workbench/services/keybinding/test/browser/keybindingIO.test.ts", + "src/vs/workbench/services/keybinding/test/node/fallbackKeyboardMapper.test.ts", + "src/vs/workbench/services/keybinding/test/node/macLinuxKeyboardMapper.test.ts", + "src/vs/workbench/services/keybinding/test/node/windowsKeyboardMapper.test.ts", + "src/vs/workbench/services/preferences/test/browser/preferencesService.test.ts", + "src/vs/workbench/services/preferences/test/common/preferencesValidation.test.ts", + "src/vs/workbench/services/search/test/browser/queryBuilder.test.ts", + "src/vs/workbench/services/search/test/common/ignoreFile.test.ts", + "src/vs/workbench/services/search/test/common/queryBuilder.test.ts", + "src/vs/workbench/services/search/test/common/replace.test.ts", + "src/vs/workbench/services/search/test/common/search.test.ts", + "src/vs/workbench/services/search/test/common/searchHelpers.test.ts", + "src/vs/workbench/services/search/test/node/ripgrepFileSearch.test.ts", + "src/vs/workbench/services/search/test/node/ripgrepTextSearchEngineUtils.test.ts", + "src/vs/workbench/services/search/test/node/textSearchManager.test.ts", + "src/vs/workbench/services/telemetry/test/browser/commonProperties.test.ts", + "src/vs/workbench/services/textfile/test/common/textFileService.io.test.ts", + "src/vs/workbench/services/textMate/test/browser/arrayOperation.test.ts", + "src/vs/workbench/services/themes/test/node/tokenStyleResolving.test.ts", + "src/vs/workbench/services/userActivity/test/browser/domActivityTracker.test.ts", + "src/vs/workbench/services/workspaces/test/browser/workspaces.test.ts", + "src/vs/workbench/services/workspaces/test/common/workspaceTrust.test.ts", + "src/vs/workbench/test/browser/quickAccess.test.ts", + "src/vs/workbench/test/browser/webview.test.ts" + ] + } + ] + } + }, { "files": [ "**/vscode.d.ts", diff --git a/.vscode/notebooks/grooming.github-issues b/.vscode/notebooks/grooming.github-issues new file mode 100644 index 00000000000..cb32618ede6 --- /dev/null +++ b/.vscode/notebooks/grooming.github-issues @@ -0,0 +1,52 @@ +[ + { + "kind": 1, + "language": "markdown", + "value": "#### Config\n" + }, + { + "kind": 2, + "language": "github-issues", + "value": "// list of repos we work in\r\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\r\n" + }, + { + "kind": 1, + "language": "markdown", + "value": "#### Missing Type label\r\n" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering -label:endgame-plan\r\n" + }, + { + "kind": 1, + "language": "markdown", + "value": "#### Missing Area Label\r\n\r\nFeature area labels are light or strong blue (`1d76db` or `c5def5`) and they denote a specific feature or feature area, like `editor-clipboard` or `file-explorer`\r\n" + }, + { + "kind": 2, + "language": "github-issues", + "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-widgets -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat -label:panel-chat -label:audio-cue -label:tasks -label:error-list -label:winget\r\n" + }, + { + "kind": 1, + "language": "markdown", + "value": "### Missing Milestone\r\n" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$repos assignee:@me is:open type:issue no:milestone -label:info-needed -label:triage-needed\r\n" + }, + { + "kind": 1, + "language": "markdown", + "value": "#### Not Actionable\r\n" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$repos assignee:@me is:open label:\"info-needed\"\r\n" + } +] \ No newline at end of file diff --git a/.vscode/notebooks/my-work.github-issues b/.vscode/notebooks/my-work.github-issues index 42bf5aee57d..5de4a3e1144 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:\"November 2023\"\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:\"November 2023\"\n" }, { "kind": 1, @@ -17,7 +17,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos $milestone assignee:@me is:open\n" + "value": "$REPOS $MILESTONE assignee:@me is:open\n" }, { "kind": 1, @@ -32,7 +32,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:bug\n" + "value": "$REPOS assignee:@me is:open label:bug\n" }, { "kind": 1, @@ -42,7 +42,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:debt,engineering\n" + "value": "$REPOS assignee:@me is:open label:debt,engineering\n" }, { "kind": 1, @@ -52,7 +52,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:perf,perf-startup,perf-bloat,freeze-slow-crash-leak\n" + "value": "$REPOS assignee:@me is:open label:perf,perf-startup,perf-bloat,freeze-slow-crash-leak\n" }, { "kind": 1, @@ -62,12 +62,12 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:feature-request milestone:Backlog sort:reactions-+1-desc\n" + "value": "$REPOS assignee:@me is:open label:feature-request milestone:Backlog sort:reactions-+1-desc\n" }, { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open milestone:\"Backlog Candidates\"\n" + "value": "$REPOS assignee:@me is:open milestone:\"Backlog Candidates\"\n" }, { "kind": 1, @@ -92,7 +92,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering\n" + "value": "$REPOS assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry -label:engineering\n" }, { "kind": 1, @@ -102,7 +102,7 @@ { "kind": 2, "language": "github-issues", - "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:cloud-changes -label:code-lens -label:command-center -label:comments -label:config -label:containers -label:context-keys -label:continue-working-on -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:emmet-parse -label:error-list -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:html -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keybindings-json -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:native-file-dialog -label:network -label:notebook -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:inline-chat\n" + "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:code-lens -label:command-center -label:comments -label:config -label:context-keys -label:custom-editors -label:debug -label:debug-console -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor-api -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-sorting -label:editor-sticky-scroll -label:editor-sticky-scroll-decorations -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet-parse -label:extension-activation -label:extension-host -label:extension-prerelease -label:extension-recommendations -label:extension-signature -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-nesting -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:github-repositories -label:gpu -label:grammar -label:grid-widget -label:icon-brand -label:icons-product -label:icons-widget -label:inlay-hints -label:inline-chat -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-playground -label:interactive-window -label:javascript -label:json -label:json-sorting -label:keybindings -label:keybindings-editor -label:keyboard-layout -label:L10N -label:l10n-platform -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list-widget -label:live-preview -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:merge-editor -label:merge-editor-workbench -label:monaco-editor -label:multi-monitor -label:native-file-dialog -label:network -label:notebook -label:notebook-accessibility -label:notebook-api -label:notebook-builtin-renderers -label:notebook-cell-editor -label:notebook-celltoolbar -label:notebook-clipboard -label:notebook-commands -label:notebook-commenting -label:notebook-debugging -label:notebook-diff -label:notebook-dnd -label:notebook-execution -label:notebook-find -label:notebook-folding -label:notebook-getting-started -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-kernel-picker -label:notebook-language -label:notebook-layout -label:notebook-markdown -label:notebook-math -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-remote -label:notebook-rendering -label:notebook-serialization -label:notebook-serverless-web -label:notebook-statusbar -label:notebook-sticky-scroll -label:notebook-toc-outline -label:notebook-undo-redo -label:notebook-variables -label:notebook-workbench-integration -label:notebook-workflow -label:open-editors -label:opener -label:outline -label:output -label:packaging -label:panel-chat -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:quickpick-chat -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-desktop -label:remote-explorer -label:remote-tunnel -label:rename -label:runCommands -label:sandbox -label:sash-widget -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:server -label:settings-editor -label:settings-search -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview-widget -label:ssh -label:suggest -label:system-context-menu -label:table-widget -label:tasks -label:telemetry -label:terminal -label:terminal-accessibility -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-find -label:terminal-input -label:terminal-layout -label:terminal-links -label:terminal-local-echo -label:terminal-persistence -label:terminal-process -label:terminal-profiles -label:terminal-quick-fix -label:terminal-rendering -label:terminal-shell-bash -label:terminal-shell-cmd -label:terminal-shell-fish -label:terminal-shell-git-bash -label:terminal-shell-integration -label:terminal-shell-pwsh -label:terminal-shell-zsh -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:timeline-local-history -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typescript -label:unc -label:undo-redo -label:unicode-highlight -label:uri -label:user-profiles -label:ux -label:variable-resolving -label:VIM -label:virtual-documents -label:virtual-workspaces -label:vscode-website -label:vscode.dev -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-auxwindow -label:workbench-banner -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-feedback -label:workbench-fonts -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-voice -label:workbench-welcome -label:workbench-window -label:workbench-workspace -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom -label:error-list -label:winget" }, { "kind": 1, @@ -112,7 +112,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open type:issue no:milestone -label:info-needed -label:triage-needed\n" + "value": "$REPOS assignee:@me is:open type:issue no:milestone -label:info-needed -label:triage-needed\n" }, { "kind": 1, @@ -122,7 +122,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos assignee:@me is:open label:\"info-needed\"\n" + "value": "$REPOS assignee:@me is:open label:\"info-needed\"\n" }, { "kind": 1, @@ -137,7 +137,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos author:@me is:open is:pr review:approved\n" + "value": "$REPOS author:@me is:open is:pr review:approved\n" }, { "kind": 1, @@ -147,7 +147,7 @@ { "kind": 2, "language": "github-issues", - "value": "$repos author:@me is:open is:pr review:required\n" + "value": "$REPOS author:@me is:open is:pr review:required\n" }, { "kind": 1, @@ -157,6 +157,6 @@ { "kind": 2, "language": "github-issues", - "value": "$repos author:@me is:open is:pr review:changes_requested\n" + "value": "$REPOS author:@me is:open is:pr review:changes_requested\n" } ] \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 98bd618b14f..163f114e7d7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -164,5 +164,9 @@ "vscode-notebook-renderer", "src/vs/workbench/workbench.web.main.ts", "src/vs/workbench/api/common/extHostTypes.ts" - ] + ], + "[github-issues]": { + "editor.wordWrap": "on" + }, + "css.format.spaceAroundSelectorSeparator": true, } diff --git a/.yarnrc b/.yarnrc index 93ab6e90d78..105cc495165 100644 --- a/.yarnrc +++ b/.yarnrc @@ -1,5 +1,5 @@ disturl "https://electronjs.org/headers" -target "25.9.6" -ms_build_id "25531495" +target "25.9.7" +ms_build_id "25551756" runtime "electron" build_from_source "true" diff --git a/build/checksums/electron.txt b/build/checksums/electron.txt index 960980997b0..9551123e83e 100644 --- a/build/checksums/electron.txt +++ b/build/checksums/electron.txt @@ -1,75 +1,75 @@ -bd1bd27fb2724748b50ed9978146e9f3c28f21f09144901da4fb09c2412ef6b8 *chromedriver-v25.9.6-darwin-arm64.zip -c8fc339dcf9d93940d9e85be0ca8ef992ee12c93f191b79b074f8c5624c195e8 *chromedriver-v25.9.6-darwin-x64.zip -77331490233bd58c1fcd8c930e8a346b50ffe4e790278370c83a7c4bfe2e91b5 *chromedriver-v25.9.6-linux-arm64.zip -2a050686a8b455ad3ff799f50844b64849db8d0b3b7354850bfb62b21408dc6c *chromedriver-v25.9.6-linux-armv7l.zip -4999e2bb69c65c84e562a9ad3420b0323ad0cffb04979ed6db8211b3bd90783e *chromedriver-v25.9.6-linux-x64.zip -42273234489748b2c16886dd4c8afada9ecf972e60ce4323fd810fb101097738 *chromedriver-v25.9.6-mas-arm64.zip -d63b3ef6eb49bc0d1d048a77e8f5059599aa8b7d74a4032cb90b6b8978dd822f *chromedriver-v25.9.6-mas-x64.zip -88337702ae3854fdd01978383753d125548f45614422e0bc1979b84e9ee4568e *chromedriver-v25.9.6-win32-arm64.zip -4e6191def9c9975d44eba453218186ebd1511c61ab739f018c6ee887b9df87e5 *chromedriver-v25.9.6-win32-ia32.zip -002e6a0e331013c8679a3835110f6f73c6b297b091bb3a82dff3ae96fbf167f6 *chromedriver-v25.9.6-win32-x64.zip -5cf2cf7f78c6c4e2411f2fca3e8a68ea8b627478d12da7f9d1066b12c2c3ad30 *electron-api.json -e18f9801837e0cf3d9818bb0829819b57545fcaebf1355999f2cb8d0eada09f1 *electron-v25.9.6-darwin-arm64-dsym-snapshot.zip -dd961d0f2de707ce5153adc0f5d62fb97e0b251f0512cf3f364ba9cb4e043161 *electron-v25.9.6-darwin-arm64-dsym.zip -14f9d7c37a85ef03300edc335ba3b43583c121bb05d23e7496adfc001a552feb *electron-v25.9.6-darwin-arm64-symbols.zip -dc06bbd7378b68d67469b958bf049944e08dc67c7fc9d0a5f94828f85982f5b9 *electron-v25.9.6-darwin-arm64.zip -d5cef8cdaa0d697ec82d1c8ca2252d7debe4a6beeab34cbd14e2af294bec6745 *electron-v25.9.6-darwin-x64-dsym-snapshot.zip -d3da17c9e8b9bcaf52871f8dfbf8589401613e4ba8dd09316bccf0606ac68fb3 *electron-v25.9.6-darwin-x64-dsym.zip -7cac10c7b4ff45f90fd8e15dbc33f69931abaf06e9791f0d4e6af5b589face64 *electron-v25.9.6-darwin-x64-symbols.zip -0accf891874030cac28632cc36ac4b88398e99aa3c39be0947ed9e3d3457c0ba *electron-v25.9.6-darwin-x64.zip -4374a1513e6829f241855bfe11b2aa6eb276a8f3cfbf4f5b8f67b0f561016219 *electron-v25.9.6-linux-arm64-debug.zip -127ba3c914d978e62765b1a6be1ffe963aa9d7ed91dbb8442bb94ebd0e45fec1 *electron-v25.9.6-linux-arm64-symbols.zip -6ced27b15114c868d2ec0e479a4cd4c32a42014f28a3cfac274c0cf5d26c8433 *electron-v25.9.6-linux-arm64.zip -4374a1513e6829f241855bfe11b2aa6eb276a8f3cfbf4f5b8f67b0f561016219 *electron-v25.9.6-linux-armv7l-debug.zip -a6f605e2174ebcaa8f508a49a1ca3d3273295f8d5547a77e7d71d1e631a40baa *electron-v25.9.6-linux-armv7l-symbols.zip -311e463b02ed81788c2ab0d462f1efcf45efa49f325b0e9383a2894cdd6bf25c *electron-v25.9.6-linux-armv7l.zip -b58e46a687f69df227567083487818d10a31fd010bf377c8c4269a8c5b0f03bf *electron-v25.9.6-linux-x64-debug.zip -17661fd7bf9ee53d5f45e7d85a8e00e02c91ef67a1fcd8f04854392910cdca44 *electron-v25.9.6-linux-x64-symbols.zip -aa6b7e15c303f3c6a75c5d46c2809975a33848600cdcfc08023085a3fb490799 *electron-v25.9.6-linux-x64.zip -e18f9801837e0cf3d9818bb0829819b57545fcaebf1355999f2cb8d0eada09f1 *electron-v25.9.6-mas-arm64-dsym-snapshot.zip -d3c688a5a6297fba598f96fc315cd1712120f9f75966c82c7cd4f727159dfa60 *electron-v25.9.6-mas-arm64-dsym.zip -49706b64eed5929236c94b74622fee539c84287a2c2b6c7391307f38817750d3 *electron-v25.9.6-mas-arm64-symbols.zip -4920d36bc45e07a4705ab779a11db5339af6e0ba52c38dd2e9add007c96399fb *electron-v25.9.6-mas-arm64.zip -3601d1a6d5f686944798b58ea95ccbfc92584d2eec7c9e73bf3acb87eb570fb0 *electron-v25.9.6-mas-x64-dsym-snapshot.zip -5ccda3381211819ab87cd3a34f22ed9cf422dbe9d36bb4e5458a6b5d523b87bc *electron-v25.9.6-mas-x64-dsym.zip -d9d01d00ebbdc8a6a4894d5486c1eec657925bfdf6948b2123051c7eadc06369 *electron-v25.9.6-mas-x64-symbols.zip -8cf6f477b9468fb0ae693c96f47852d3f1be96eb5b4ca45b1946295c3677d28f *electron-v25.9.6-mas-x64.zip -568fbe49277eb0458e79c7793ea6038c419624b654628892535bc58f1f86c5f8 *electron-v25.9.6-win32-arm64-pdb.zip -9cbcf9e64c0f2611d27cea77105595a7ab9c57cc933da3bf162edb1b7f1a9808 *electron-v25.9.6-win32-arm64-symbols.zip -e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.6-win32-arm64-toolchain-profile.zip -6c4f9beed89c7bfd1538815861e2b1128a28a82fd729429dca1757dc4f77ccbd *electron-v25.9.6-win32-arm64.zip -b8eb0490a78757f61ca4438a1f78eb7874eb8da66544432adbdb97fa84bad2d6 *electron-v25.9.6-win32-ia32-pdb.zip -87edb1f236e7728b0c2b7a055e9f56f375fc2cafda880c3a6dc6df06678308ce *electron-v25.9.6-win32-ia32-symbols.zip -e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.6-win32-ia32-toolchain-profile.zip -ba25e44570ec2ba476052a43220011ee36609c70af9a96255385987ef9aafee4 *electron-v25.9.6-win32-ia32.zip -e9b4061feadf44020976bde51427e8f19d5921cf0bee1a6f7f2c91428896a0f6 *electron-v25.9.6-win32-x64-pdb.zip -5f85dc477fd1cb780dddfb6b62ef758a36a7973a1c51e58e5ba00b5b2c0a2eaa *electron-v25.9.6-win32-x64-symbols.zip -e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.6-win32-x64-toolchain-profile.zip -ed6410951228470ff976227042a0b430b72ce6c1e241a48fec367a86df8fa0a1 *electron-v25.9.6-win32-x64.zip -fc51b357c0fff78487b91a927076e2520d57081abe6a4ddbb8d15e3f462cbdb3 *electron.d.ts -0cf917e3270eeb935152a02e223cd551e43f59d40f2951a93cc24be2497f60de *ffmpeg-v25.9.6-darwin-arm64.zip -9254e94359efac66a2d9161d8e9312a43d174eab56ce4fb8cab202e5516a3ad0 *ffmpeg-v25.9.6-darwin-x64.zip -bd52d57ff97fb56ac01a3482af905d04f0d4e9c13c53858c6d9f99957eca82da *ffmpeg-v25.9.6-linux-arm64.zip -9b3d09177fa1e63e2a6beecfa70aeec30aeb5c1873ff21128a68051c4e23f95d *ffmpeg-v25.9.6-linux-armv7l.zip -edc7b1c9f1a0733f109a2c0375a4e40c5bfe0bf28b7f06dcc76e1ada0aa2f125 *ffmpeg-v25.9.6-linux-x64.zip -d50d1880a1c9e4ef11d8e712091b8faa0f47bcbdf339cbf276dd952892c64dbe *ffmpeg-v25.9.6-mas-arm64.zip -d61f6ecb96cb28876e9f53944763cac2d9b85a9d9dba53851f477ac3dc3301ef *ffmpeg-v25.9.6-mas-x64.zip -198d05aaef020af1a98453246a3e3ff999331b63967607fb706586f08cc43fac *ffmpeg-v25.9.6-win32-arm64.zip -2b80110b470491dbf33f2dcf1188a865980c94fb2a940cff5610e5b86701b51b *ffmpeg-v25.9.6-win32-ia32.zip -37f260ab3ae666df594705b400ff6592ddc4f088d95b585acd37ba529db5fff2 *ffmpeg-v25.9.6-win32-x64.zip -b1423529a11f5348b6b78a36d355134aec2760a1a2744699c83cd0b6b03cd425 *hunspell_dictionaries.zip -c89b061fe0b8835df41b8c00d3f791bc0830fb9be6b0955518c78bcacb5dd75f *libcxx-objects-v25.9.6-linux-arm64.zip -098e9f8af88085189e4c04f324baafa09d7a64c350576fd38d9dbf32ff0e8d30 *libcxx-objects-v25.9.6-linux-armv7l.zip -2e4e4faac500704cf16db656a870b9981659671ebaef4dfc972b5ad222422a81 *libcxx-objects-v25.9.6-linux-x64.zip -b61068bc99d5144f1f31f6a5d9862ebd7f091c745dba0ddfd1135be395540721 *libcxx_headers.zip -3a13e19e8633bea161650a6b3eba8a0b08b98e84d0246a72eea099d0807cba3c *libcxxabi_headers.zip -a33a708edab6fd2cab24eba6ea520e4b762bfd642e7a8e5548281c190b94a2a1 *mksnapshot-v25.9.6-darwin-arm64.zip -3ac987f47d898a8ef3f3ac2703be1aad4c10dc44dc01f5c2a495a8ca9ec9c660 *mksnapshot-v25.9.6-darwin-x64.zip -c3ee9b1d7d899c9211154fd56b2403cd882d77bb58fb48bbe744a668fe05256d *mksnapshot-v25.9.6-linux-arm64-x64.zip -440e7a903decccf95c1e0a1b01bef286413a59bd2c0831553f52872ba3790e22 *mksnapshot-v25.9.6-linux-armv7l-x64.zip -7240fa92f34beb0c6e5f455bc1f08f693de4480e852c986989f799849b1c6961 *mksnapshot-v25.9.6-linux-x64.zip -4a4f0337d444fa390ed7dffc70c73b67db0d37c978683aa0d41ee9cac741b690 *mksnapshot-v25.9.6-mas-arm64.zip -10de1874b5d168e9cdce9c825a1a29eee830495a9c4c0ab1c2849e89641b35b0 *mksnapshot-v25.9.6-mas-x64.zip -b2a15fdb3cca2085fdd72bc991fd8f945a028c0ed5872e9d271a79c8f61efb1d *mksnapshot-v25.9.6-win32-arm64-x64.zip -bd625b4089e43ece3246f92bfa1d0d401efe522cf9a3cba52bcc484aa86ec7a5 *mksnapshot-v25.9.6-win32-ia32.zip -f82a10a340568bcfc6605e69853f84b2158f0e86561c42036ee2232b23fccbec *mksnapshot-v25.9.6-win32-x64.zip +6d0c679fa3f8a9498b708f93c40c0918523c5790bb0e0055b0e8ac871efc228d *chromedriver-v25.9.7-darwin-arm64.zip +cd758c34bb6a5bf0ce0df48627fafa4fab5d1f22f2622b29cba3f5c5cc2dd4ae *chromedriver-v25.9.7-darwin-x64.zip +bcfd29d527ba4d243b496dddee58a73e82a2aeaae5c1c15d55a5729a5d714576 *chromedriver-v25.9.7-linux-arm64.zip +869e2584570e1a472bd60bf6a405abc53702e1c8c20f24ff9e6e74449e49fad6 *chromedriver-v25.9.7-linux-armv7l.zip +af8c4bc1277cf816bc9b94d1da4febda0083f7764318dbaca6d678527bffcc4f *chromedriver-v25.9.7-linux-x64.zip +9c7ce39bc74da1db6a95ed63683649001a42306476a288afb55c53c3fca1fef0 *chromedriver-v25.9.7-mas-arm64.zip +123fbab9b17aac3142051bfd3c60f1ac1b0eb6e71049b9e6d489a0f917daa909 *chromedriver-v25.9.7-mas-x64.zip +e6a52e4181ee1a3a15ba254c237043147b72904f38b7b925e40e85d37cf1d44a *chromedriver-v25.9.7-win32-arm64.zip +4c5b8d1df6efe5c9ec5db033a3fc2ec7f93f429d0c43d6025fe0f7b96f2cf449 *chromedriver-v25.9.7-win32-ia32.zip +388cc0cce6ce11a60d0b81c5b37b8cb04bcbade533616973a4ef7161487aa59f *chromedriver-v25.9.7-win32-x64.zip +0bfdc68d235fb824b809f59394a0e39c735235a07c1a715df26cc65cd55141b0 *electron-api.json +bba809f7e84b67efabe8b9c92d2cf976d4d90c56c0d20d88fa893d0e47674e50 *electron-v25.9.7-darwin-arm64-dsym-snapshot.zip +9058c533f955a792ad491094b4b2c31def667916301eb42f8d36d3b60b7bcf69 *electron-v25.9.7-darwin-arm64-dsym.zip +59c72fb1bd0c58b4ad05a2478bb3fba69c05e195b4d5972b3723c13b70d04fa6 *electron-v25.9.7-darwin-arm64-symbols.zip +f0fd83b62946669849c535f89eb8a44e17fa1d1a454058447759d2a2f5ce03fc *electron-v25.9.7-darwin-arm64.zip +75473483e4dbdd7416e1dd78ab8123940904e7c63d5ae47efd481a3806dedc34 *electron-v25.9.7-darwin-x64-dsym-snapshot.zip +119e21d1961f11978a85dc0fef58d689a94ea9593ee4122519a02e449da52cf8 *electron-v25.9.7-darwin-x64-dsym.zip +77aaac85c725d32ca9a79e9efa1749d1404bbacb72aa9e15846da566c49543f1 *electron-v25.9.7-darwin-x64-symbols.zip +a3c61f288d416a7ddc23c9b5db779502243f630bffaba47ab66c0f00c0018fdb *electron-v25.9.7-darwin-x64.zip +d8fe114d07c4d0953e4ab40da6d9c958b401e4304755a7a133f13156b8ca48e4 *electron-v25.9.7-linux-arm64-debug.zip +1e0df565ec278b6515adee40f9eed06f5931297a72a6eb71c1472f8d31dbe8b1 *electron-v25.9.7-linux-arm64-symbols.zip +c889eec8bdb2737ff03d03d571df7834e3cef764527688db87f6578f54684d7c *electron-v25.9.7-linux-arm64.zip +d8fe114d07c4d0953e4ab40da6d9c958b401e4304755a7a133f13156b8ca48e4 *electron-v25.9.7-linux-armv7l-debug.zip +d58185a0eff29461868d5e8b15a387ccf8f2ffd407c06e787f1a89b73ce8b794 *electron-v25.9.7-linux-armv7l-symbols.zip +56b31812f7b4b010f34240bb3e3ea186c8c7f87e75be483a3877f93d7b9442d1 *electron-v25.9.7-linux-armv7l.zip +1818221bd66f005fc6cd843375db9a13dd0c8ef9709725ed9708177fbc2e26d0 *electron-v25.9.7-linux-x64-debug.zip +87907fb6fec001e7dcd4ebb9e6340a008385a5de2e59ce06c6de0828f2ed6aaa *electron-v25.9.7-linux-x64-symbols.zip +54b458ac590c495bef05ed6708a4667bbeac6a1865734ac3ecbb4da24ab57d26 *electron-v25.9.7-linux-x64.zip +bba809f7e84b67efabe8b9c92d2cf976d4d90c56c0d20d88fa893d0e47674e50 *electron-v25.9.7-mas-arm64-dsym-snapshot.zip +7d8271d31dc3a1348ccdf7f70bd111ca43f8f5dbba509dcbafafa607432070d4 *electron-v25.9.7-mas-arm64-dsym.zip +965d581a44d70e6597b3da8864754eeb3470d1db0451d5d4385c43063e78a80d *electron-v25.9.7-mas-arm64-symbols.zip +1ddbe56386e08612f6196f5a9b1ad6de4e45cb1525175f4a8dbb1abd14673614 *electron-v25.9.7-mas-arm64.zip +2b2c4ae842cd6da1d4d7784e40a6e28ee087b399320d73fa8470b91570efa92f *electron-v25.9.7-mas-x64-dsym-snapshot.zip +abed370155c8f758ab25f1e201791889cd1d1c81e967f56b1eb0e7f2116d307b *electron-v25.9.7-mas-x64-dsym.zip +2b5d527fd2c4658dea4a0ec5c16c44f79f4be6d316a450c300cbd2635131ab2f *electron-v25.9.7-mas-x64-symbols.zip +ca0a53619c4c71331f1641d4186496a6ad9f557357e24028c49fa25b5e8ab3e2 *electron-v25.9.7-mas-x64.zip +491d76cd80b52bac63000c4affdf63f11a043fb196e75974648ef3cacba8eb0b *electron-v25.9.7-win32-arm64-pdb.zip +238a44d5c38ef9b3ec521a17af3808f7148bb6106c285b37148a9a45142029e9 *electron-v25.9.7-win32-arm64-symbols.zip +e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.7-win32-arm64-toolchain-profile.zip +d3a90da294b5137177af45d492d09603363db39a9c77ce43be24d80fea03347f *electron-v25.9.7-win32-arm64.zip +5c1a25b57e6a50ab0224f1eaef5572e122905ff0c690dda58f1c767100eab405 *electron-v25.9.7-win32-ia32-pdb.zip +96706d1eab97189ae3eda815a270ebe02bef3e228428fcd343065866569a3a16 *electron-v25.9.7-win32-ia32-symbols.zip +e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.7-win32-ia32-toolchain-profile.zip +16fecd283bae6b72747132b8a7da68520a69752ac9d5fa1d39f3a43a8920f366 *electron-v25.9.7-win32-ia32.zip +4c2c40cb56ee8e6091a8860c8eec1e59542d525e3c23506e0f265aec29aacb49 *electron-v25.9.7-win32-x64-pdb.zip +5c4e56dce95bdfac8d91e7d2b6af69b7dab98d823377392a68e41352e4098daf *electron-v25.9.7-win32-x64-symbols.zip +e7b968fc53cc7a10a4ccb5133af045968479685ebb9617f06817f03667fdd425 *electron-v25.9.7-win32-x64-toolchain-profile.zip +d4b77ec5b7cfc8d156a0518ebd82eb373440ce2abf1af92b6faa32cf444b7256 *electron-v25.9.7-win32-x64.zip +c80b2154d9de94a520c09b038b27f4a5e93177f8de48821c3f129cea0e52bd1c *electron.d.ts +65f4ed4292b9114f79385dac6e79c468ad686f97b0c4d507943ad7b9a28821c4 *ffmpeg-v25.9.7-darwin-arm64.zip +5259bd7c62211644aa6bb982a8e80d36b5c0049a76917cc1d39fc2226df02da5 *ffmpeg-v25.9.7-darwin-x64.zip +bd52d57ff97fb56ac01a3482af905d04f0d4e9c13c53858c6d9f99957eca82da *ffmpeg-v25.9.7-linux-arm64.zip +9b3d09177fa1e63e2a6beecfa70aeec30aeb5c1873ff21128a68051c4e23f95d *ffmpeg-v25.9.7-linux-armv7l.zip +edc7b1c9f1a0733f109a2c0375a4e40c5bfe0bf28b7f06dcc76e1ada0aa2f125 *ffmpeg-v25.9.7-linux-x64.zip +3eb7218d6fa54ebb3836773df6414d1b0e119071761151dc48dd39ab7421a1ba *ffmpeg-v25.9.7-mas-arm64.zip +0dbbba4c8120c1a0a00cffec6e4ad70013eab35b77e19877c79fc7ae9caff1e9 *ffmpeg-v25.9.7-mas-x64.zip +11853e7c01586a0b9b2a58caee308282b6cf1662b7b5bf9ac5d74de423b16f1c *ffmpeg-v25.9.7-win32-arm64.zip +7306690feb13bb97491ca0c4ac3fa78feb5d3227043b317febddb10136eb0b2b *ffmpeg-v25.9.7-win32-ia32.zip +da487bff8151e47827fa684607d1799e5d0c0b53dcd51e76c955ed5d2ee8f24a *ffmpeg-v25.9.7-win32-x64.zip +77b9a9567a24c5583722d97a3cb23a075ebf1eec885cec660c53cd1b54992b30 *hunspell_dictionaries.zip +9a3395cbd02f241134df5eb6cb65788052919bc19816c92befe6cb500eeb398c *libcxx-objects-v25.9.7-linux-arm64.zip +1feea6b4bd9ee66c0dfd0327e422f07b4b52cb24e872b12aa37e98d819fbadc6 *libcxx-objects-v25.9.7-linux-armv7l.zip +2f3bbda5de58e46705d622d1f671224973cef54de9cbdb8355dfe270ca092288 *libcxx-objects-v25.9.7-linux-x64.zip +324a1eed3f8197bbeac0a513d50a394b2eaa0ac92c92f9526b0b07d74f12c4e8 *libcxx_headers.zip +8052c0a22a9ad673d32c1ae157df9638838fbd017a030263d4cce21aeed5c824 *libcxxabi_headers.zip +7dd7ddb90482c84fb7d29e10ca8293bc85ed692c4f1f636624229bbe8ac103af *mksnapshot-v25.9.7-darwin-arm64.zip +696f5eb1d7eb5941ea0c2cca1e0682d77d7883f71ff18f577e6ccdb1591e8a4e *mksnapshot-v25.9.7-darwin-x64.zip +aff92c1eb4ef1c33fa4d1fcda43ee6123f87c5acd72093f78c8d22daaba2622d *mksnapshot-v25.9.7-linux-arm64-x64.zip +8e7463c9714b99d8fafee3830f5bcbf335ff9f66b9d8b9a77d285a688a0691c0 *mksnapshot-v25.9.7-linux-armv7l-x64.zip +329c285e158322667844cccf99767ea1ef39ada804edbbfe99ddbe2c228ddc21 *mksnapshot-v25.9.7-linux-x64.zip +aa30c1cb96f52bfc68e44dd7c2420a153de577652a9312a5c85256a1f2769f48 *mksnapshot-v25.9.7-mas-arm64.zip +e32f14ed222f7e01d81982959601df7881928d5f90ada773454a06203bd83412 *mksnapshot-v25.9.7-mas-x64.zip +472ffc38d34c059c1e1036784a11109f6d998e91d4b8c4bb0e84ded3d66f7bea *mksnapshot-v25.9.7-win32-arm64-x64.zip +882a8880a03deffa40b24cbc59af31ac285a6a1e0e049d053f750d3db17853ea *mksnapshot-v25.9.7-win32-ia32.zip +dfe408f01ddcc9b4f52b59fcefe49386f30eb097cef78fb98b8667deb42bc7f1 *mksnapshot-v25.9.7-win32-x64.zip diff --git a/build/lib/fetch.js b/build/lib/fetch.js index 71dbfd0ce42..01bee2f081a 100644 --- a/build/lib/fetch.js +++ b/build/lib/fetch.js @@ -36,7 +36,7 @@ async function fetchUrl(url, options, retries = 10, retryDelay = 1000) { try { let startTime = 0; if (verbose) { - log(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? `(${10 - retries} retry}` : ''}`); + log(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? ` (${10 - retries} retry)` : ''}`); startTime = new Date().getTime(); } const controller = new AbortController(); diff --git a/build/lib/fetch.ts b/build/lib/fetch.ts index 58803c34836..c076408fab5 100644 --- a/build/lib/fetch.ts +++ b/build/lib/fetch.ts @@ -46,7 +46,7 @@ export async function fetchUrl(url: string, options: IFetchOptions, retries = 10 try { let startTime = 0; if (verbose) { - log(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? `(${10 - retries} retry}` : ''}`); + log(`Start fetching ${ansiColors.magenta(url)}${retries !== 10 ? ` (${10 - retries} retry)` : ''}`); startTime = new Date().getTime(); } const controller = new AbortController(); diff --git a/cgmanifest.json b/cgmanifest.json index db840afa215..5de4d621039 100644 --- a/cgmanifest.json +++ b/cgmanifest.json @@ -528,12 +528,12 @@ "git": { "name": "electron", "repositoryUrl": "https://github.com/electron/electron", - "commitHash": "7916733f5ff0cf319972a0df44de01e40bbfa40e" + "commitHash": "55738ddac34a75be9bfbdda3ac1638adfd0e5479" } }, "isOnlyProductionDependency": true, "license": "MIT", - "version": "25.9.6" + "version": "25.9.7" }, { "component": { diff --git a/cli/src/commands/args.rs b/cli/src/commands/args.rs index 7863635ae99..a69d021cab8 100644 --- a/cli/src/commands/args.rs +++ b/cli/src/commands/args.rs @@ -223,7 +223,7 @@ pub struct CommandShellArgs { #[clap(long, num_args = 0..=1, default_missing_value = "0")] pub on_port: Option, /// Require the given token string to be given in the handshake. - #[clap(long)] + #[clap(long, env = "VSCODE_CLI_REQUIRE_TOKEN")] pub require_token: Option, /// Optional parent process id. If provided, the server will be stopped when the process of the given pid no longer exists #[clap(long, hide = true)] diff --git a/extensions/git/package.json b/extensions/git/package.json index d3b0cd4aeb7..e7c316cb07b 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -24,7 +24,6 @@ "tabInputTextMerge", "timeline", "contribMergeEditorMenus", - "scmInputBoxActionButton", "contribSourceControlInputBoxMenu" ], "categories": [ diff --git a/extensions/git/src/api/api1.ts b/extensions/git/src/api/api1.ts index 623d9fe30fb..747a2ada11b 100644 --- a/extensions/git/src/api/api1.ts +++ b/extensions/git/src/api/api1.ts @@ -5,7 +5,7 @@ import { Model } from '../model'; import { Repository as BaseRepository, Resource } from '../repository'; -import { InputBox, Git, API, Repository, Remote, RepositoryState, Branch, ForcePushMode, Ref, Submodule, Commit, Change, RepositoryUIState, Status, LogOptions, APIState, CommitOptions, RefType, CredentialsProvider, BranchQuery, PushErrorHandler, PublishEvent, FetchOptions, RemoteSourceProvider, RemoteSourcePublisher, PostCommitCommandsProvider, RefQuery, BranchProtectionProvider, InitOptions, CommitMessageProvider } from './git'; +import { InputBox, Git, API, Repository, Remote, RepositoryState, Branch, ForcePushMode, Ref, Submodule, Commit, Change, RepositoryUIState, Status, LogOptions, APIState, CommitOptions, RefType, CredentialsProvider, BranchQuery, PushErrorHandler, PublishEvent, FetchOptions, RemoteSourceProvider, RemoteSourcePublisher, PostCommitCommandsProvider, RefQuery, BranchProtectionProvider, InitOptions } from './git'; import { Event, SourceControlInputBox, Uri, SourceControl, Disposable, commands, CancellationToken } from 'vscode'; import { combinedDisposable, mapEvent } from '../util'; import { toGitUri } from '../uri'; @@ -345,13 +345,6 @@ export class ApiImpl implements API { return this._model.registerBranchProtectionProvider(root, provider); } - /** - * @deprecated See https://github.com/microsoft/vscode/issues/195474 - */ - registerCommitMessageProvider(provider: CommitMessageProvider): Disposable { - return this._model.registerCommitMessageProvider(provider); - } - constructor(private _model: Model) { } } diff --git a/extensions/git/src/api/git.d.ts b/extensions/git/src/api/git.d.ts index a9a49a95141..9fe777689e3 100644 --- a/extensions/git/src/api/git.d.ts +++ b/extensions/git/src/api/git.d.ts @@ -312,12 +312,6 @@ export interface BranchProtectionProvider { provideBranchProtection(): BranchProtection[]; } -export interface CommitMessageProvider { - readonly title: string; - readonly icon?: Uri | { light: Uri, dark: Uri } | ThemeIcon; - provideCommitMessage(repository: Repository, changes: string[], cancellationToken?: CancellationToken): Promise; -} - export type APIState = 'uninitialized' | 'initialized'; export interface PublishEvent { @@ -345,7 +339,6 @@ export interface API { registerPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable; registerPushErrorHandler(handler: PushErrorHandler): Disposable; registerBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable; - registerCommitMessageProvider(provider: CommitMessageProvider): Disposable; } export interface GitExtension { diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index 3eb213ecea0..2ed3c5fd5b6 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -3631,26 +3631,6 @@ export class CommandCenter { } } - @command('git.generateCommitMessage', { repository: true }) - async generateCommitMessage(repository: Repository): Promise { - if (!repository || !this.model.commitMessageProvider) { - return; - } - - await window.withProgress({ location: ProgressLocation.SourceControl }, async () => { - await repository.generateCommitMessage(); - }); - } - - @command('git.generateCommitMessageCancel', { repository: true }) - generateCommitMessageCancel(repository: Repository): void { - if (!repository || !this.model.commitMessageProvider) { - return; - } - - repository.generateCommitMessageCancel(); - } - @command('git.viewChanges', { repository: true }) viewChanges(repository: Repository): void { this._viewChanges('Git: Changes', repository.workingTreeGroup.resourceStates); diff --git a/extensions/git/src/commitMessageProvider.ts b/extensions/git/src/commitMessageProvider.ts deleted file mode 100644 index 02b8c097a50..00000000000 --- a/extensions/git/src/commitMessageProvider.ts +++ /dev/null @@ -1,188 +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, Disposable, Event, EventEmitter, Uri, workspace, ThemeIcon, l10n, SourceControlInputBoxActionButton } from 'vscode'; -import { CommitMessageProvider, Status, Repository as ApiRepository } from './api/git'; -import { Repository } from './repository'; -import { dispose } from './util'; - -export interface ICommitMessageProviderRegistry { - readonly onDidChangeCommitMessageProvider: Event; - - commitMessageProvider: CommitMessageProvider | undefined; - registerCommitMessageProvider(provider: CommitMessageProvider): Disposable; -} - -export class TestCommitMessageProvider implements CommitMessageProvider { - - readonly icon = new ThemeIcon('rocket'); - readonly title = 'Generate Commit Message (Test)'; - - private readonly _changesMap = new Map(); - - async provideCommitMessage(repository: ApiRepository, changes: string[], token: CancellationToken): Promise { - console.log('Repository: ', repository.rootUri.fsPath); - - if (token.isCancellationRequested) { - return undefined; - } - - return new Promise(resolve => { - token.onCancellationRequested(() => resolve(undefined)); - - setTimeout(() => { - const attemptCount = this.getAttemptCount(repository, changes); - this._changesMap.set(repository.rootUri.fsPath, [changes, attemptCount]); - - resolve(`Test commit message (Attempt No. ${attemptCount})`); - }, 5000); - }); - } - - private getAttemptCount(repository: ApiRepository, changes: string[]): number { - const [previousChanges, previousCount] = this._changesMap.get(repository.rootUri.fsPath) ?? [[], 1]; - if (previousChanges.length !== changes.length) { - return 1; - } - - for (let index = 0; index < changes.length; index++) { - if (previousChanges[index] !== changes[index]) { - return 1; - } - } - - return previousCount + 1; - } - -} - -interface ActionButtonState { - readonly isGenerating: boolean; - readonly enabled: boolean; -} - -export class GenerateCommitMessageActionButton { - - private _onDidChange = new EventEmitter(); - get onDidChange(): Event { return this._onDidChange.event; } - - private _state: ActionButtonState; - get state() { return this._state; } - set state(state: ActionButtonState) { - if (this._state.enabled === state.enabled && - this._state.isGenerating === state.isGenerating) { - return; - } - - this._state = state; - this._onDidChange.fire(); - } - - get button(): SourceControlInputBoxActionButton | undefined { - if (this.commitMessageProviderRegistry.commitMessageProvider === undefined) { - return undefined; - } - - return this.state.isGenerating ? - { - icon: new ThemeIcon('debug-stop'), - command: { - title: l10n.t('Cancel'), - command: 'git.generateCommitMessageCancel', - arguments: [this.repository.sourceControl] - }, - enabled: this.state.enabled, - } : - { - icon: this.commitMessageProviderRegistry.commitMessageProvider.icon ?? new ThemeIcon('sparkle'), - command: { - title: this.commitMessageProviderRegistry.commitMessageProvider.title, - command: 'git.generateCommitMessage', - arguments: [this.repository.sourceControl] - }, - enabled: this.state.enabled - }; - } - - private disposables: Disposable[] = []; - - constructor( - private readonly repository: Repository, - private readonly commitMessageProviderRegistry: ICommitMessageProviderRegistry - ) { - this._state = { - enabled: false, - isGenerating: false - }; - - const root = Uri.file(repository.root); - this.disposables.push(workspace.onDidChangeConfiguration(e => { - if (e.affectsConfiguration('git.enableSmartCommit', root) || - e.affectsConfiguration('git.smartCommitChanges', root) || - e.affectsConfiguration('git.suggestSmartCommit', root)) { - this.onDidChangeSmartCommitSettings(); - } - })); - repository.onDidRunGitStatus(this.onDidRunGitStatus, this, this.disposables); - repository.onDidStartCommitMessageGeneration(this.onDidStartCommitMessageGeneration, this, this.disposables); - repository.onDidEndCommitMessageGeneration(this.onDidEndCommitMessageGeneration, this, this.disposables); - commitMessageProviderRegistry.onDidChangeCommitMessageProvider(this.onDidChangeCommitMessageProvider, this, this.disposables); - } - - private onDidChangeCommitMessageProvider(): void { - this._onDidChange.fire(); - } - - private onDidStartCommitMessageGeneration(): void { - this.state = { ...this.state, isGenerating: true }; - } - - private onDidEndCommitMessageGeneration(): void { - this.state = { ...this.state, isGenerating: false }; - } - - private onDidChangeSmartCommitSettings(): void { - this.state = { - ...this.state, - enabled: this.repositoryHasChangesToCommit() - }; - } - - private onDidRunGitStatus(): void { - this.state = { - ...this.state, - enabled: this.repositoryHasChangesToCommit() - }; - } - - private repositoryHasChangesToCommit(): boolean { - const config = workspace.getConfiguration('git', Uri.file(this.repository.root)); - const enableSmartCommit = config.get('enableSmartCommit') === true; - const suggestSmartCommit = config.get('suggestSmartCommit') === true; - const smartCommitChanges = config.get<'all' | 'tracked'>('smartCommitChanges', 'all'); - - const resources = [...this.repository.indexGroup.resourceStates]; - - if ( - // Smart commit enabled (all) - (enableSmartCommit && smartCommitChanges === 'all') || - // Smart commit disabled, smart suggestion enabled - (!enableSmartCommit && suggestSmartCommit) - ) { - resources.push(...this.repository.workingTreeGroup.resourceStates); - } - - // Smart commit enabled (tracked only) - if (enableSmartCommit && smartCommitChanges === 'tracked') { - resources.push(...this.repository.workingTreeGroup.resourceStates.filter(r => r.type !== Status.UNTRACKED)); - } - - return resources.length !== 0; - } - - dispose(): void { - this.disposables = dispose(this.disposables); - } -} diff --git a/extensions/git/src/model.ts b/extensions/git/src/model.ts index 4632cd83bb3..ccab4e07857 100644 --- a/extensions/git/src/model.ts +++ b/extensions/git/src/model.ts @@ -12,14 +12,13 @@ import { Git } from './git'; import * as path from 'path'; import * as fs from 'fs'; import { fromGitUri } from './uri'; -import { APIState as State, CredentialsProvider, PushErrorHandler, PublishEvent, RemoteSourcePublisher, PostCommitCommandsProvider, BranchProtectionProvider, CommitMessageProvider } from './api/git'; +import { APIState as State, CredentialsProvider, PushErrorHandler, PublishEvent, RemoteSourcePublisher, PostCommitCommandsProvider, BranchProtectionProvider } from './api/git'; import { Askpass } from './askpass'; import { IPushErrorHandlerRegistry } from './pushError'; import { ApiRepository } from './api/api1'; import { IRemoteSourcePublisherRegistry } from './remotePublisher'; import { IPostCommitCommandsProviderRegistry } from './postCommitCommands'; import { IBranchProtectionProviderRegistry } from './branchProtection'; -import { ICommitMessageProviderRegistry } from './commitMessageProvider'; class RepositoryPick implements QuickPickItem { @memoize get label(): string { @@ -171,7 +170,7 @@ class UnsafeRepositoriesManager { } } -export class Model implements IRepositoryResolver, IBranchProtectionProviderRegistry, ICommitMessageProviderRegistry, IRemoteSourcePublisherRegistry, IPostCommitCommandsProviderRegistry, IPushErrorHandlerRegistry { +export class Model implements IRepositoryResolver, IBranchProtectionProviderRegistry, IRemoteSourcePublisherRegistry, IPostCommitCommandsProviderRegistry, IPushErrorHandlerRegistry { private _onDidOpenRepository = new EventEmitter(); readonly onDidOpenRepository: Event = this._onDidOpenRepository.event; @@ -238,14 +237,6 @@ export class Model implements IRepositoryResolver, IBranchProtectionProviderRegi private pushErrorHandlers = new Set(); - private _commitMessageProvider: CommitMessageProvider | undefined; - get commitMessageProvider(): CommitMessageProvider | undefined { - return this._commitMessageProvider; - } - - private _onDidChangeCommitMessageProvider = new EventEmitter(); - readonly onDidChangeCommitMessageProvider = this._onDidChangeCommitMessageProvider.event; - private _unsafeRepositoriesManager: UnsafeRepositoriesManager; get unsafeRepositories(): string[] { return this._unsafeRepositoriesManager.repositories; @@ -587,7 +578,7 @@ export class Model implements IRepositoryResolver, IBranchProtectionProviderRegi // Open repository const [dotGit, repositoryRootRealPath] = await Promise.all([this.git.getRepositoryDotGit(repositoryRoot), this.getRepositoryRootRealPath(repositoryRoot)]); - const repository = new Repository(this.git.open(repositoryRoot, repositoryRootRealPath, dotGit, this.logger), this, this, this, this, this, this, this.globalState, this.logger, this.telemetryReporter); + const repository = new Repository(this.git.open(repositoryRoot, repositoryRootRealPath, dotGit, this.logger), this, this, this, this, this, this.globalState, this.logger, this.telemetryReporter); this.open(repository); this._closedRepositoriesManager.deleteRepository(repository.root); @@ -948,16 +939,6 @@ export class Model implements IRepositoryResolver, IBranchProtectionProviderRegi return toDisposable(() => this.pushErrorHandlers.delete(handler)); } - registerCommitMessageProvider(provider: CommitMessageProvider): Disposable { - this._commitMessageProvider = provider; - this._onDidChangeCommitMessageProvider.fire(); - - return toDisposable(() => { - this._commitMessageProvider = undefined; - this._onDidChangeCommitMessageProvider.fire(); - }); - } - getPushErrorHandlers(): PushErrorHandler[] { return [...this.pushErrorHandlers]; } diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index a7897b26fd8..05f95ebd28f 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -24,7 +24,6 @@ import { IPostCommitCommandsProviderRegistry, CommitCommandsCenter } from './pos import { Operation, OperationKind, OperationManager, OperationResult } from './operation'; import { GitBranchProtectionProvider, IBranchProtectionProviderRegistry } from './branchProtection'; import { GitHistoryProvider } from './historyProvider'; -import { GenerateCommitMessageActionButton, ICommitMessageProviderRegistry } from './commitMessageProvider'; const timeout = (millis: number) => new Promise(c => setTimeout(c, millis)); @@ -34,47 +33,6 @@ function getIconUri(iconName: string, theme: string): Uri { return Uri.file(path.join(iconsRootPath, theme, `${iconName}.svg`)); } -function wrapCommitMessage(message: string, subjectLineLength: number, bodyLineLength: number): string { - const messageLinesWrapped: string[] = []; - const messageLines = message.split(/\r?\n/g); - - for (let index = 0; index < messageLines.length; index++) { - const messageLine = messageLines[index]; - const threshold = index === 0 ? subjectLineLength : bodyLineLength; - - if (messageLine.length <= threshold) { - messageLinesWrapped.push(messageLine); - continue; - } - - let position = 0; - const lineSegments: string[] = []; - while (messageLine.length - position > threshold) { - const lastSpaceBeforeThreshold = messageLine.lastIndexOf(' ', position + threshold); - if (lastSpaceBeforeThreshold !== -1 && lastSpaceBeforeThreshold > position) { - lineSegments.push(...[messageLine.substring(position, lastSpaceBeforeThreshold), '\n']); - position = lastSpaceBeforeThreshold + 1; - } else { - // Find first space after threshold - const firstSpaceAfterThreshold = messageLine.indexOf(' ', position); - if (firstSpaceAfterThreshold !== -1) { - lineSegments.push(...[messageLine.substring(position, firstSpaceAfterThreshold), '\n']); - position = firstSpaceAfterThreshold + 1; - } else { - lineSegments.push(messageLine.substring(position)); - position = messageLine.length; - } - } - } - if (position < messageLine.length) { - lineSegments.push(messageLine.substring(position)); - } - messageLinesWrapped.push(lineSegments.join('')); - } - - return messageLinesWrapped.join('\n'); -} - export const enum RepositoryState { Idle, Disposed @@ -845,7 +803,6 @@ export class Repository implements Disposable { private commitCommandCenter: CommitCommandsCenter; private resourceCommandResolver = new ResourceCommandResolver(this); private updateModelStateCancellationTokenSource: CancellationTokenSource | undefined; - private generateCommitMessageCancellationTokenSource: CancellationTokenSource | undefined; private disposables: Disposable[] = []; constructor( @@ -855,7 +812,6 @@ export class Repository implements Disposable { remoteSourcePublisherRegistry: IRemoteSourcePublisherRegistry, postCommitCommandsProviderRegistry: IPostCommitCommandsProviderRegistry, private readonly branchProtectionProviderRegistry: IBranchProtectionProviderRegistry, - private readonly commitMessageProviderRegistry: ICommitMessageProviderRegistry, globalState: Memento, private readonly logger: LogOutputChannel, private telemetryReporter: TelemetryReporter @@ -901,11 +857,6 @@ export class Repository implements Disposable { this._sourceControl.acceptInputCommand = { command: 'git.commit', title: l10n.t('Commit'), arguments: [this._sourceControl] }; this._sourceControl.inputBox.validateInput = this.validateInput.bind(this); - const inputActionButton = new GenerateCommitMessageActionButton(this, commitMessageProviderRegistry); - this.disposables.push(inputActionButton); - inputActionButton.onDidChange(() => this._sourceControl.inputBox.actionButton = inputActionButton.button); - this._sourceControl.inputBox.actionButton = inputActionButton.button; - this.disposables.push(this._sourceControl); this.updateInputBoxPlaceholder(); @@ -2086,58 +2037,6 @@ export class Repository implements Disposable { }); } - async generateCommitMessage(): Promise { - if (!this.commitMessageProviderRegistry.commitMessageProvider) { - return; - } - - this._onDidStartCommitMessageGeneration.fire(); - this.generateCommitMessageCancellationTokenSource?.cancel(); - this.generateCommitMessageCancellationTokenSource = new CancellationTokenSource(); - - try { - const diff: string[] = []; - if (this.indexGroup.resourceStates.length !== 0) { - for (const file of this.indexGroup.resourceStates.map(r => r.resourceUri.fsPath)) { - diff.push(await this.diffIndexWithHEAD(file)); - } - } else { - for (const file of this.workingTreeGroup.resourceStates.map(r => r.resourceUri.fsPath)) { - diff.push(await this.diffWithHEAD(file)); - } - } - - if (diff.length === 0) { - return; - } - - const token = this.generateCommitMessageCancellationTokenSource.token; - const provider = this.commitMessageProviderRegistry.commitMessageProvider; - const commitMessage = await provider.provideCommitMessage(new ApiRepository(this), diff, token); - if (commitMessage) { - const config = workspace.getConfiguration('git'); - const subjectLineLength = config.get('inputValidationSubjectLength', null); - const bodyLineLength = config.get('inputValidationLength', 50); - - this.inputBox.value = wrapCommitMessage(commitMessage, subjectLineLength ?? bodyLineLength, bodyLineLength); - } - } - catch (err) { - this.logger.error(err); - } - finally { - this._onDidEndCommitMessageGeneration.fire(); - } - } - - generateCommitMessageCancel(): void { - this.generateCommitMessageCancellationTokenSource?.cancel(); - this.generateCommitMessageCancellationTokenSource?.dispose(); - this.generateCommitMessageCancellationTokenSource = undefined; - - this._onDidEndCommitMessageGeneration.fire(); - } - // Parses output of `git check-ignore -v -z` and returns only those paths // that are actually ignored by git. // Matches to a negative pattern (starting with '!') are filtered out. diff --git a/extensions/git/tsconfig.json b/extensions/git/tsconfig.json index 022beed0bcb..d5fdbd539da 100644 --- a/extensions/git/tsconfig.json +++ b/extensions/git/tsconfig.json @@ -13,7 +13,6 @@ "../../src/vscode-dts/vscode.proposed.diffCommand.d.ts", "../../src/vscode-dts/vscode.proposed.scmActionButton.d.ts", "../../src/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts", - "../../src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.ts", "../../src/vscode-dts/vscode.proposed.scmSelectedProvider.d.ts", "../../src/vscode-dts/vscode.proposed.scmValidation.d.ts", "../../src/vscode-dts/vscode.proposed.tabInputTextMerge.d.ts", diff --git a/extensions/ini/package.json b/extensions/ini/package.json index ac1a59e8af5..a8b332a74ec 100644 --- a/extensions/ini/package.json +++ b/extensions/ini/package.json @@ -35,7 +35,8 @@ ".gitattributes", ".gitconfig", ".gitmodules", - ".editorconfig" + ".editorconfig", + ".repo" ], "filenames": [ "gitconfig", diff --git a/extensions/less/build/update-grammar.js b/extensions/less/build/update-grammar.js new file mode 100644 index 00000000000..d0b2ec9025f --- /dev/null +++ b/extensions/less/build/update-grammar.js @@ -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. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +var updateGrammar = require('vscode-grammar-updater'); + +function adaptLess(grammar) { + grammar.name = 'Less'; + grammar.scopeName = 'source.css.less'; +} + +async function updateGrammars() { + await updateGrammar.update('radium-v/Better-Less', 'Syntaxes/Better%20Less.tmLanguage', './syntaxes/less.tmLanguage.json', adaptLess, 'master'); +} + +updateGrammars(); + diff --git a/extensions/less/cgmanifest.json b/extensions/less/cgmanifest.json index 1951ef04bee..663e1cc4daf 100644 --- a/extensions/less/cgmanifest.json +++ b/extensions/less/cgmanifest.json @@ -5,12 +5,12 @@ "type": "git", "git": { "name": "language-less", - "repositoryUrl": "https://github.com/atom/language-less", - "commitHash": "87d4d59e8de6796b506b81a16e1dc1fafc99d30f" + "repositoryUrl": "https://github.com/radium-v/Better-Less", + "commitHash": "05de79f600227201e35f07a49f07acce80e49dbf" } }, "license": "MIT", - "version": "0.34.2" + "version": "0.6.1" } ], "version": 1 diff --git a/extensions/less/package.json b/extensions/less/package.json index 5974be71933..96301ba0fd1 100644 --- a/extensions/less/package.json +++ b/extensions/less/package.json @@ -9,7 +9,7 @@ "vscode": "*" }, "scripts": { - "update-grammar": "node ../node_modules/vscode-grammar-updater/bin atom/language-less grammars/less.cson ./syntaxes/less.tmLanguage.json" + "update-grammar": "node ./build/update-grammar.js" }, "contributes": { "languages": [ diff --git a/extensions/less/syntaxes/less.tmLanguage.json b/extensions/less/syntaxes/less.tmLanguage.json index 3f0b88a29d7..3d2c6bdaeb0 100644 --- a/extensions/less/syntaxes/less.tmLanguage.json +++ b/extensions/less/syntaxes/less.tmLanguage.json @@ -1,183 +1,155 @@ { "information_for_contributors": [ - "This file has been converted from https://github.com/atom/language-less/blob/master/grammars/less.cson", + "This file has been converted from https://github.com/radium-v/Better-Less/blob/master/Syntaxes/Better%20Less.tmLanguage", "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/atom/language-less/commit/87d4d59e8de6796b506b81a16e1dc1fafc99d30f", + "version": "https://github.com/radium-v/Better-Less/commit/05de79f600227201e35f07a49f07acce80e49dbf", "name": "Less", "scopeName": "source.css.less", "patterns": [ { - "include": "#strings" + "include": "#comment-block" }, { + "include": "#less-namespace-accessors" + }, + { + "include": "#less-extend" + }, + { + "include": "#at-rules" + }, + { + "include": "#less-variable-assignment" + }, + { + "include": "#property-list" + }, + { + "include": "#selector" + } + ], + "repository": { + "angle-type": { "captures": { "1": { - "name": "entity.other.attribute-name.class.mixin.css" + "name": "keyword.other.unit.less" } }, - "match": "(\\.[_a-zA-Z][a-zA-Z0-9_-]*(?=\\())" + "match": "(?i:[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(deg|grad|rad|turn))\\b", + "name": "constant.numeric.less" }, - { + "at-charset": { + "begin": "\\s*((@)charset\\b)\\s*", "captures": { "1": { - "name": "entity.other.attribute-name.class.css" + "name": "keyword.control.at-rule.charset.less" }, "2": { - "name": "punctuation.definition.entity.css" - }, - "4": { - "name": "variable.other.interpolation.less" - } - }, - "match": "((\\.)([_a-zA-Z]|(@{[a-zA-Z0-9_-]+}))[a-zA-Z0-9_-]*)" - }, - { - "captures": { - "0": { - "name": "entity.other.attribute-name.parent-selector.css" - }, - "1": { - "name": "punctuation.definition.entity.css" - } - }, - "match": "(&)[a-zA-Z0-9_-]*" - }, - { - "begin": "(format|local|url|attr|counter|counters)\\s*(\\()", - "beginCaptures": { - "1": { - "name": "support.function.misc.css" - }, - "2": { - "name": "punctuation.section.function.css" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "punctuation.section.function.css" + "name": "punctuation.definition.keyword.less" } }, + "end": "\\s*((?=;|$))", + "name": "meta.at-rule.charset.less", "patterns": [ { - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.css" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.css" - } - }, - "name": "string.quoted.single.css", - "patterns": [ - { - "match": "\\\\.", - "name": "constant.character.escape.css" - } - ] - }, - { - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.css" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.css" - } - }, - "name": "string.quoted.double.css", - "patterns": [ - { - "match": "\\\\(\\d{1,6}|.)", - "name": "constant.character.escape.css" - } - ] - }, - { - "match": "[^'\") \\t]+", - "name": "variable.parameter.misc.css" + "include": "#literal-string" } ] }, - { - "match": "(#)([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\\b(?!.*?(?(['\"])(?:[^\\\\]|\\\\.)*?(\\6)))))?\\s*(\\])", - "name": "meta.attribute-selector.css" + "end": "\\s*(\\})", + "endCaptures": { + "1": { + "name": "punctuation.definition.block.begin.less" + } + }, + "name": "meta.at-rule.counter-style.less", + "patterns": [ + { + "include": "#comment-block" + }, + { + "include": "#rule-list" + } + ] }, - { - "begin": "((@)import\\b)", + "at-custom-media": { + "begin": "(?=\\s*@custom-media\\b)", + "end": "\\s*(?=;)", + "name": "meta.at-rule.custom-media.less", + "patterns": [ + { + "captures": { + "0": { + "name": "punctuation.section.property-list.less" + } + }, + "match": "\\s*;" + }, + { + "captures": { + "1": { + "name": "keyword.control.at-rule.custom-media.less" + }, + "2": { + "name": "punctuation.definition.keyword.less" + }, + "3": { + "name": "support.constant.custom-media.less" + } + }, + "match": "\\s*((@)custom-media)(?=.*?)" + }, + { + "include": "#media-query-list" + } + ] + }, + "at-font-face": { + "begin": "\\s*((@)font-face)\\s*(?=\\{|$)", + "captures": { + "1": { + "name": "keyword.control.at-rule.font-face.less" + }, + "2": { + "name": "punctuation.definition.keyword.less" + } + }, + "end": "\\s*(\\})", + "endCaptures": { + "1": { + "name": "punctuation.definition.block.end.less" + } + }, + "name": "meta.at-rule.font-face.less", + "patterns": [ + { + "include": "#comment-block" + }, + { + "include": "#rule-list" + } + ] + }, + "at-import": { + "begin": "\\s*((@)import\\b)\\s*", "beginCaptures": { "1": { "name": "keyword.control.at-rule.import.less" @@ -186,357 +158,4860 @@ "name": "punctuation.definition.keyword.less" } }, - "end": ";", + "end": "\\;", "endCaptures": { "0": { - "name": "punctuation.terminator.rule.css" + "name": "punctuation.terminator.rule.less" } }, - "name": "meta.at-rule.import.css", + "name": "meta.at-rule.import.less", "patterns": [ { - "match": "(?<=\\(|,|\\s)\\b(reference|optional|once|multiple|less|inline)\\b(?=\\)|,)", - "name": "keyword.control.import.option.less" + "include": "#url-function" }, { - "include": "#brace_round" + "include": "#less-variables" }, { - "include": "source.css#commas" - }, - { - "include": "#strings" - } - ] - }, - { - "captures": { - "1": { - "name": "keyword.control.at-rule.fontface.css" - }, - "2": { - "name": "punctuation.definition.keyword.css" - } - }, - "match": "^\\s*((@)font-face\\b)", - "name": "meta.at-rule.fontface.css" - }, - { - "captures": { - "1": { - "name": "keyword.control.at-rule.media.css" - }, - "2": { - "name": "punctuation.definition.keyword.css" - } - }, - "match": "^\\s*((@)media\\b)", - "name": "meta.at-rule.media.css" - }, - { - "include": "source.css#media-features" - }, - { - "match": "\\b(tv|tty|screen|projection|print|handheld|embossed|braille|aural|all)\\b", - "name": "support.constant.media-type.media.css" - }, - { - "match": "\\b(portrait|landscape)\\b", - "name": "support.constant.property-value.media-property.media.css" - }, - { - "captures": { - "1": { - "name": "support.function.less" - } - }, - "match": "(\\.[a-zA-Z0-9_-]+)\\s*(;|\\()" - }, - { - "begin": "(^[ \\t]+)?(?=//)", - "beginCaptures": { - "1": { - "name": "punctuation.whitespace.comment.leading.less" - } - }, - "end": "(?!\\G)", - "patterns": [ - { - "begin": "//", - "beginCaptures": { - "0": { - "name": "punctuation.definition.comment.less" - } - }, - "end": "\\n", - "name": "comment.line.double-slash.less" - } - ] - }, - { - "match": "(@|\\-\\-)[\\w-]+(?=\\s*)", - "name": "variable.other.less", - "captures": { - "1": { - "name": "punctuation.definition.variable.less" - } - } - }, - { - "include": "#variable_interpolation" - }, - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.property-list.begin.bracket.curly.css" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.property-list.end.bracket.curly.css" - } - }, - "name": "meta.property-list.css", - "patterns": [ - { - "include": "source.css#pseudo-elements" - }, - { - "include": "source.css#pseudo-classes" - }, - { - "include": "source.css#tag-names" - }, - { - "include": "source.css#commas" - }, - { - "include": "#variable_interpolation" - }, - { - "include": "source.css#property-names" - }, - { - "include": "#property_values" - }, - { - "include": "$self" - } - ] - }, - { - "match": "\\!\\s*important", - "name": "keyword.other.important.css" - }, - { - "match": "\\*|\\/|\\-|\\+|~|=|<=|>=|<|>", - "name": "keyword.operator.less" - }, - { - "match": "\\b(not|and|when)\\b", - "name": "keyword.control.logical.operator.less" - }, - { - "include": "source.css#tag-names" - }, - { - "match": "(?)=?))\\s*" + }, + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.group.less", + "patterns": [ + { + "include": "#less-logical-comparisons" + } + ] + }, + { + "match": "\\btrue|false\\b", + "name": "constant.language.less" + }, + { + "match": ",", + "name": "punctuation.separator.less" + }, + { + "include": "#property-values" + }, + { + "include": "#selectors" + }, + { + "include": "#unquoted-string" + } + ] + }, + "less-math": { + "patterns": [ + { + "match": "[-\\+\\*\\/]", + "name": "keyword.operator.arithmetic.less" + }, + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "meta.group.less", + "patterns": [ + { + "include": "#less-math" + } + ] + }, + { + "include": "#numeric-values" + }, + { + "include": "#less-variables" + } + ] + }, + "less-math-functions": { + "patterns": [ + { + "begin": "\\b(ceil|floor|percentage|round|sqrt|abs|a?(sin|cos|tan))(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.math.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": "#less-variables" + }, + { + "include": "#numeric-values" + } + ] + } + ] + }, + { + "captures": { + "2": { + "name": "support.function.math.less" + }, + "3": { + "name": "punctuation.definition.group.begin.less" + }, + "4": { + "name": "punctuation.definition.group.end.less" + } + }, + "match": "((pi)(\\()(\\)))", + "name": "meta.function-call.less" + }, + { + "begin": "\\b(pow|m(od|in|ax))(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.math.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": "#less-variables" + }, + { + "include": "#numeric-values" + }, + { + "include": "#comma-delimiter" + } + ] + } + ] + } + ] + }, + "less-misc-functions": { + "patterns": [ + { + "begin": "\\b(color)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.color.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": "#literal-string" + } + ] + } + ] + }, + { + "begin": "\\b(image-(size|width|height))(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.image.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": "#literal-string" + }, + { + "include": "#unquoted-string" + } + ] + } + ] + }, + { + "begin": "\\b(convert|unit)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.convert.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": "#less-variables" + }, + { + "include": "#dimensions" + }, + { + "include": "#numeric-values" + }, + { + "include": "#literal-string" + }, + { + "include": "#comma-delimiter" + }, + { + "match": "((c|m)?m|in|p(t|c|x)|m?s|g?rad|deg|turn|%|r?em|ex|ch)", + "name": "keyword.other.unit.less" + } + ] + } + ] + }, + { + "begin": "\\b(data-uri)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.data-uri.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": "#less-variables" + }, + { + "include": "#literal-string" + }, + { + "captures": { + "1": { + "name": "punctuation.separator.less" + } + }, + "match": "\\s*(?:(,))" + } + ] + } + ] + }, + { + "captures": { + "2": { + "name": "punctuation.definition.group.begin.less" + }, + "3": { + "name": "punctuation.definition.group.end.less" + } + }, + "match": "\\b(default(\\()(\\)))\\b", + "name": "support.function.default.less" + }, + { + "begin": "\\b(get-unit)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.get-unit.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": "#dimensions" + } + ] + } + ] + }, + { + "begin": "\\b(svg-gradient)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.svg-gradient.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": "#angle-type" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#color-values" + }, + { + "include": "#percentage-type" + }, + { + "include": "#length-type" + }, + { + "match": "\\bto\\b", + "name": "keyword.other.less" + }, + { + "match": "\\b(top|right|bottom|left|center)\\b", + "name": "support.constant.property-value.less" + }, + { + "match": "\\b(at|circle|ellipse)\\b", + "name": "keyword.other.less" + } + ] + } + ] + } + ] + }, + "less-mixin-guards": { + "patterns": [ + { + "begin": "\\s*(and|not|or)?\\s*(?=\\()", + "beginCaptures": { + "1": { + "name": "keyword.operator.logical.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "name": "meta.group.less", + "patterns": [ + { + "include": "#less-variable-comparison" + }, + { + "captures": { + "1": { + "name": "meta.group.less" + }, + "2": { + "name": "punctuation.definition.group.begin.less" + }, + "3": { + "name": "punctuation.definition.group.end.less" + } + }, + "match": "default((\\()(\\)))", + "name": "support.function.default.less" + }, + { + "include": "#property-values" + }, + { + "include": "#less-logical-comparisons" + }, + { + "include": "$self" + } + ] + } + ] + } + ] + }, + "less-namespace-accessors": { + "patterns": [ + { + "begin": "(?=\\s*when\\b)", + "end": "\\s*(?:(,)|(?=[{;]))", + "endCaptures": { + "1": { + "name": "punctuation.definition.block.end.less" + } + }, + "name": "meta.conditional.guarded-namespace.less", + "patterns": [ + { + "captures": { + "1": { + "name": "keyword.control.conditional.less" + }, + "2": { + "name": "punctuation.definition.keyword.less" + } + }, + "match": "\\s*(when)(?=.*?)" + }, + { + "include": "#less-mixin-guards" + }, + { + "include": "#comma-delimiter" + }, + { + "begin": "\\s*(\\{)", + "beginCaptures": { + "1": { + "name": "punctuation.section.property-list.begin.less" + } + }, + "end": "(?=\\})", + "name": "meta.block.less", + "patterns": [ + { + "include": "#rule-list-body" + } + ] + }, + { + "include": "#selectors" + } + ] + }, + { + "begin": "(\\()", + "beginCaptures": { + "1": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(\\))", + "endCaptures": { + "1": { + "name": "punctuation.definition.group.end.less" + }, + "2": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "meta.group.less", + "patterns": [ + { + "include": "#less-variable-assignment" + }, + { + "include": "#comma-delimiter" + }, + { + "captures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "match": "\\s*(;)|(?=[})])" + }, + { + "include": "#property-values" + }, + { + "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" + } + ] + }, + "less-string-functions": { + "patterns": [ + { + "begin": "\\b(e(scape)?)(?=\\()\\b", + "beginCaptures": { + "1": { + "name": "support.function.escape.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": "#less-variables" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#literal-string" + }, + { + "include": "#unquoted-string" + } + ] + } + ] + }, + { + "begin": "\\s*(%)(?=\\()\\s*", + "beginCaptures": { + "1": { + "name": "support.function.format.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": "#less-variables" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#literal-string" + }, + { + "include": "#property-values" + } + ] + } + ] + }, + { + "begin": "\\b(replace)(?=\\()\\b", + "beginCaptures": { + "1": { + "name": "support.function.replace.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": "#less-variables" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#literal-string" + }, + { + "include": "#property-values" + } + ] + } + ] + } + ] + }, + "less-strings": { + "patterns": [ + { + "begin": "(~)('|\")", + "beginCaptures": { + "1": { + "name": "constant.character.escape.less" + }, + "2": { + "name": "punctuation.definition.string.begin.less" + } + }, + "contentName": "markup.raw.inline.less", + "end": "('|\")|(\\n)", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.less" + }, + "2": { + "name": "invalid.illegal.newline.less" + } + }, + "name": "string.quoted.other.less", + "patterns": [ + { + "include": "#string-content" + } + ] + } + ] + }, + "less-type-functions": { + "patterns": [ + { + "begin": "\\b(is(number|string|color|keyword|url|pixel|em|percentage|ruleset))(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.type.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": "#property-values" + } + ] + } + ] + }, + { + "begin": "\\b(isunit)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.type.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": "#property-values" + }, + { + "include": "#comma-delimiter" + }, + { + "match": "(?x)\\b((?i:em|ex|ch|rem)|(?i:vw|vh|vmin|vmax)|(?i:cm|mm|q|in|pt|pc|px|fr)|(?i:deg|grad|rad|turn)|(?i:s|ms)|(?i:Hz|kHz)|(?i:dpi|dpcm|dppx))\\b", + "name": "keyword.other.unit.less" + } + ] + } + ] + }, + { + "begin": "\\b(isdefined)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.type.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": "#less-variables" + } + ] + } + ] + } + ] + }, + "less-variable-assignment": { + "patterns": [ + { + "begin": "(@)(-?(?:[[-\\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]))*)", + "beginCaptures": { + "0": { + "name": "variable.other.readwrite.less" + }, + "1": { + "name": "punctuation.definition.variable.less" + }, + "2": { + "name": "support.other.variable.less" + } + }, + "end": "\\s*(;|(\\.{3})|(?=\\)))", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + }, + "2": { + "name": "keyword.operator.spread.less" + } + }, + "name": "meta.property-value.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "include": "#property-values" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#property-list" + }, + { + "include": "#unquoted-string" + } + ] + } + ] + }, + "less-variable-comparison": { + "patterns": [ + { + "begin": "(@{1,2})([-]?([_a-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]))*)", + "beginCaptures": { + "0": { + "name": "variable.other.readwrite.less" + }, + "1": { + "name": "punctuation.definition.variable.less" + }, + "2": { + "name": "support.other.variable.less" + } + }, + "end": "\\s*(?=\\))", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "patterns": [ + { + "captures": { + "1": { + "name": "keyword.operator.logical.less" + } + }, + "match": "\\s*(=|((<|>)=?))\\s*" + }, + { + "match": "\\btrue\\b", + "name": "constant.language.less" + }, + { + "include": "#property-values" + }, + { + "include": "#selectors" + }, + { + "include": "#unquoted-string" + }, + { + "match": ",", + "name": "punctuation.separator.less" + } + ] + } + ] + }, + "less-variable-interpolation": { + "captures": { + "1": { + "name": "punctuation.definition.variable.less" + }, + "2": { + "name": "punctuation.definition.expression.less" + }, + "3": { + "name": "support.other.variable.less" + }, + "4": { + "name": "punctuation.definition.expression.less" + } + }, + "match": "(@)(\\{)([-\\w]+)(\\})", + "name": "variable.other.readwrite.less" + }, + "less-variables": { + "captures": { + "1": { + "name": "punctuation.definition.variable.less" + }, + "2": { + "name": "support.other.variable.less" + } + }, + "match": "\\s*(@@?)([-\\w]+)", + "name": "variable.other.readwrite.less" + }, + "literal-string": { + "patterns": [ + { + "begin": "'", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.less" + } + }, + "end": "(')|(\\n)", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.less" + }, + "2": { + "name": "invalid.illegal.newline.less" + } + }, + "name": "string.quoted.single.less", + "patterns": [ + { + "include": "#string-content" + } + ] + }, + { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.less" + } + }, + "end": "(\")|(\\n)", + "endCaptures": { + "1": { + "name": "punctuation.definition.string.end.less" + }, + "2": { + "name": "invalid.illegal.newline.less" + } + }, + "name": "string.quoted.double.less", + "patterns": [ + { + "include": "#string-content" + } + ] + }, + { + "include": "#less-strings" + } + ] + }, + "local-function": { + "begin": "\\b(local)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.font-face.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": "#unquoted-string" + } + ] + } + ] + }, + "media-query": { + "begin": "\\s*(only|not)?\\s*(all|aural|braille|embossed|handheld|print|projection|screen|tty|tv)?", + "beginCaptures": { + "1": { + "name": "keyword.operator.logic.media.less" + }, + "2": { + "name": "support.constant.media.less" + } + }, + "end": "\\s*(?:(,)|(?=[{;]))", + "endCaptures": { + "1": { + "name": "punctuation.definition.arbitrary-repetition.less" + } + }, + "patterns": [ + { + "include": "#less-variables" + }, + { + "include": "#custom-property-name" + }, + { + "begin": "\\s*(and)?\\s*(\\()\\s*", + "beginCaptures": { + "1": { + "name": "keyword.operator.logic.media.less" + }, + "2": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "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*(?=[:)])", + "beginCaptures": { + "0": { + "name": "support.type.property-name.media.less" + }, + "2": { + "name": "support.type.vendor-prefix.less" + }, + "5": { + "name": "support.type.vendor-prefix.less" + } + }, + "end": "(((\\+_?)?):)|(?=\\))", + "endCaptures": { + "1": { + "name": "punctuation.separator.key-value.less" + } + } + }, + { + "match": "\\b(portrait|landscape|progressive|interlace)", + "name": "support.constant.property-value.less" + }, + { + "captures": { + "1": { + "name": "constant.numeric.less" + }, + "2": { + "name": "keyword.operator.arithmetic.less" + }, + "3": { + "name": "constant.numeric.less" + } + }, + "match": "\\s*(\\d+)(/)(\\d+)" + }, + { + "include": "#less-math" + } + ] + } + ] + }, + "media-query-list": { + "begin": "\\s*(?=[^{;])", + "end": "\\s*(?=[{;])", + "patterns": [ + { + "include": "#media-query" + } + ] + }, + "minmax-function": { + "begin": "\\b(minmax)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.grid.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": "#less-variables" + }, + { + "include": "#length-type" + }, + { + "include": "#comma-delimiter" + }, + { + "match": "\\b(max-content|min-content)\\b", + "name": "support.constant.property-value.less" + } + ] + } + ] + }, + "number-type": { + "match": "[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))", + "name": "constant.numeric.less" + }, + "numeric-values": { + "patterns": [ + { + "include": "#dimensions" + }, + { + "include": "#percentage-type" + }, + { + "include": "#number-type" + } + ] + }, + "percentage-type": { + "captures": { + "1": { + "name": "keyword.other.unit.less" + } + }, + "match": "[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(%)", + "name": "constant.numeric.less" + }, + "property-list": { + "patterns": [ + { + "begin": "(?=(?=[^;]*)\\{)", + "end": "\\}", + "endCaptures": { + "0": { + "name": "punctuation.definition.block.end.less" + } + }, + "patterns": [ + { + "include": "#rule-list" + } + ] + } + ] + }, + "property-value-constants": { + "patterns": [ + { + "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)?\n |blur\n |bold(er)?\n |border(-bottom|-left|-right|-top)?-(color|radius|width|style)\n |border-(bottom|top)-(left|right)-radius\n |border-image(-outset|-repeat|-slice|-source|-width)?\n |border(-bottom|-left|-right|-top|-collapse|-spacing|-box)?\n |both|bottom\n |box(-shadow)?\n |break-(all|word)\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 |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|fixed|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|geometricPrecision|glyphs|gradient|grayscale\n |grid(-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)?\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 |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|painted|paused\n |pan-(x|left|right|y|up|down)\n |perspective-origin\n |petite-caps|pixelated|pointer\n |pinch-zoom\n |pre(-line|-wrap)?\n |preserve-3d\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|ridge|right\n |round\n |row(-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 |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", + "name": "support.constant.property-value.less" + }, + { + "match": "\\b(?i:sans-serif|serif|monospace|fantasy|cursive)\\b(?=\\s*[;,\\n}])", + "name": "support.constant.font-name.less" + } + ] + }, + "property-values": { + "patterns": [ + { + "include": "#comment-block" + }, + { + "include": "#vendor-prefix" + }, + { + "include": "#builtin-functions" + }, + { + "include": "#color-functions" + }, + { + "include": "#less-math" + }, + { + "include": "#less-functions" + }, + { + "include": "#less-variables" + }, + { + "include": "#unicode-range" + }, + { + "include": "#numeric-values" + }, + { + "include": "#color-values" + }, + { + "include": "#property-value-constants" + }, + { + "include": "#literal-string" + }, + { + "captures": { + "1": { + "name": "punctuation.separator.less" + } + }, + "match": "(\\!)\\s*important", + "name": "keyword.other.important.less" + } + ] + }, + "pseudo-classes": { + "patterns": [ + { + "begin": "(:)(dir|lang)(?=\\()", + "captures": { + "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": [ + { + "include": "#unquoted-string" + } + ] + } + ] + }, + { + "begin": "(:)(not)(?=\\()", + "captures": { + "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": [ + { + "include": "#selectors" + } + ] + } + ] + }, + { + "begin": "(:)(nth(-last)?-(child|of-type))(?=\\()", + "captures": { + "1": { + "name": "punctuation.definition.entity.less" + }, + "2": { + "name": "entity.other.attribute-name.pseudo-class.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": "(?=\\))", + "name": "meta.group.less", + "patterns": [ + { + "match": "\\b(even|odd)\\b", + "name": "keyword.other.pseudo-class.less" + }, + { + "captures": { + "1": { + "name": "keyword.other.unit.less" + } + }, + "match": "(?:[-+]?(?:\\d+)?(n)(\\s*[-+]\\s*\\d+)?|[-+]?\\s*\\d+)", + "name": "constant.numeric.less" + }, + { + "include": "#less-math" + }, + { + "include": "#less-strings" + }, + { + "include": "#less-variable-interpolation" + } + ] + } + ] + }, + { + "begin": "(:)(host-context)(?=\\()", + "captures": { + "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": [ + { + "include": "#selectors" + } + ] + } + ] + }, + { + "captures": { + "1": { + "name": "punctuation.definition.entity.less" + }, + "2": { + "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)", + "name": "meta.function-call.less" + } + ] + }, + "pseudo-elements": { + "patterns": [ + { + "begin": "(::)(slotted)(?=\\()", + "captures": { + "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": [ + { + "include": "#selectors" + } + ] + } + ] + }, + { + "captures": { + "1": { + "name": "punctuation.definition.entity.less" + }, + "2": { + "name": "punctuation.definition.entity.less" + }, + "3": { + "name": "support.type.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", + "name": "entity.other.attribute-name.pseudo-element.less" + } + ] + }, + "qualified-name": { + "captures": { + "1": { + "name": "entity.name.constant.less" + }, + "2": { + "name": "entity.name.namespace.wildcard.less" + }, + "3": { + "name": "punctuation.separator.namespace.less" + } + }, + "match": "(?:(-?(?:[[-\\w][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[_a-zA-Z][^\\x{00}-\\x{7F}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)|(\\*))?([|])(?!=)" + }, + "regexp-function": { + "begin": "\\b(regexp)(?=\\()", + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.group.end.less" + } + }, + "name": "support.function.regexp.less", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.group.begin.less" + } + }, + "end": "(?=\\))", + "name": "meta.function-call.less", + "patterns": [ + { + "include": "#literal-string" + } + ] + } + ] + }, + "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": [ + { + "begin": "\\{", + "beginCaptures": { + "0": { + "name": "punctuation.definition.block.begin.less" + } + }, + "end": "(?=\\s*\\})", + "name": "meta.property-list.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "match": "\\s*(;)|(?=[})])" + }, + { + "include": "#rule-list-body" + }, + { + "include": "#less-extend" + } + ] + } + ] + }, + "rule-list-body": { + "patterns": [ + { + "include": "#comment-block" + }, + { + "include": "#comment-line" + }, + { + "include": "#at-rules" + }, + { + "include": "#less-variable-assignment" + }, + { + "include": "#less-variable-interpolation" + }, + { + "begin": "(?=[-a-z])", + "end": "$|(?![-a-z])", + "patterns": [ + { + "include": "#vendor-prefix" + }, + { + "include": "#custom-property-name" + }, + { + "include": "#filter-function" + }, + { + "captures": { + "1": { + "name": "keyword.other.custom-property.prefix.less" + }, + "2": { + "name": "support.type.custom-property.name.less" + } + }, + "match": "\\b(var-)(-?(?:[[-\\w][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[_a-zA-Z][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)(?=\\s)", + "name": "invalid.deprecated.custom-property.less" + }, + { + "begin": "\\bfont(-family)?(?!-)\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "meta.property-name.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "include": "#property-values" + }, + { + "match": "-?(?:[[_a-zA-Z][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[-\\w][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*(\\s+-?(?:[[_a-zA-Z][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[-\\w][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*)*", + "name": "string.unquoted.less" + }, + { + "match": ",", + "name": "punctuation.separator.less" + } + ] + }, + { + "begin": "\\banimation(-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function))?\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "patterns": [ + { + "begin": "(((\\+_?)?):)(?=[\\s\\t]*)", + "beginCaptures": { + "1": { + "name": "punctuation.separator.key-value.less" + } + }, + "captures": { + "1": { + "name": "punctuation.definition.arbitrary-repetition.less" + } + }, + "contentName": "meta.property-value.less", + "end": "(?=\\s*(;)|(?=[})]))", + "patterns": [ + { + "match": "\\b(linear|ease(-in)?(-out)?|step-(start|end)|none|forwards|backwards|both|normal|alternate(-reverse)?|reverse|running|paused)\\b", + "name": "support.constant.property-value.less" + }, + { + "include": "#cubic-bezier-function" + }, + { + "include": "#steps-function" + }, + { + "include": "#time-type" + }, + { + "include": "#number-type" + }, + { + "match": "-?(?:[_a-zA-Z]|[^\\x{00}-\\x{7F}]|(?:(:?\\\\[0-9a-f]{1,6}(\\r\\n|[\\s\\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-f]))(?:[-_a-zA-Z0-9]|[^\\x{00}-\\x{7F}]|(?:(:?\\\\[0-9a-f]{1,6}(\\r\\n|[\\t\\r\\n\\f])?)|\\\\[^\\r\\n\\f0-9a-f]))*", + "name": "variable.other.constant.animation-name.less" + }, + { + "include": "#literal-string" + }, + { + "include": "#property-values" + }, + { + "match": "\\s*(?:(,))" + } + ] + } + ] + }, + { + "begin": "\\b(transition(-(property|duration|delay|timing-function))?)\\b", + "beginCaptures": { + "0": { + "name": "meta.property-name.less" + }, + "1": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "include": "#time-type" + }, + { + "include": "#property-values" + }, + { + "include": "#cubic-bezier-function" + }, + { + "include": "#steps-function" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.arbitrary-repetition.less" + } + }, + "match": "\\s*(?:(,))" + } + ] + }, + { + "begin": "\\bfilter\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "meta.property-name.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "match": "\\b(inherit|initial|unset|none)\\b", + "name": "meta.property-value.less" + }, + { + "include": "#filter-functions" + } + ] + }, + { + "begin": "\\bwill-change\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "meta.property-name.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "match": "unset|initial|inherit|will-change|auto|scroll-position|contents", + "name": "invalid.illegal.property-value.less" + }, + { + "match": "-?(?:[[-\\w][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[_a-zA-Z][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*", + "name": "support.constant.property-value.less" + }, + { + "captures": { + "1": { + "name": "punctuation.definition.arbitrary-repetition.less" + } + }, + "match": "\\s*(?:(,))" + } + ] + }, + { + "begin": "\\bcounter-(increment|(re)?set)\\b", + "beginCaptures": { + "0": { + "name": "support.type.property-name.less" + } + }, + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "name": "meta.property-name.less", + "patterns": [ + { + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "match": "(((\\+_?)?):)([\\s\\t]*)" + }, + { + "match": "-?(?:[[-\\w][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))(?:[[_a-zA-Z][^\\x{00}-\\x{9f}]]|(?:\\\\\\h{1,6}[\\s\\t\\n\\f]?|\\\\[^\\n\\f\\h]))*", + "name": "entity.name.constant.counter-name.less" + }, + { + "include": "#integer-type" + }, + { + "match": "unset|initial|inherit|auto", + "name": "invalid.illegal.property-value.less" + } + ] + }, + { + "match": "(?x)\\b( accent-height | align-content | align-items | align-self | alignment-baseline | all | animation-timing-function | animation-play-state | animation-name | animation-iteration-count | animation-fill-mode | animation-duration | animation-direction | animation-delay | 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|right|bottom|left)-)?(width|style|color) | border-(top|bottom)-(right|left)-radius | border-image-(width|source|slice|repeat|outset) | border-(top|right|bottom|left|collapse|image|radius|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 | 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 | 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) | isolation | justify-content | kerning | left | letter-spacing | lighting-color | line-(box-contain|break|clamp|height) | list-style(-(image|position|type))? | margin(-(bottom|left|right|top))? | 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(-(scrolling|wrap|x|y))? | pad(ding(-(bottom|left|right|top))?)? | page(-break-(after|before|inside))? | paint-order | pause(-(after|before))? | perspective(-origin(-(x|y))?)? | pitch(-range)? | 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|shadow|transform|underline-position) | 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 | widows | width | will-change | word-(break|spacing|wrap) | writing-mode | z-index | zoom )\\b", + "name": "support.type.property-name.less" + }, + { + "include": "$self" + } + ] + }, + { + "begin": "\\b(((\\+_?)?):)([\\s\\t]*)", + "captures": { + "1": { + "name": "punctuation.separator.key-value.less" + }, + "4": { + "name": "meta.property-value.less" + } + }, + "contentName": "meta.property-value.less", + "end": "\\s*(;)|(?=[})])", + "endCaptures": { + "1": { + "name": "punctuation.terminator.rule.less" + } + }, + "patterns": [ + { + "include": "#property-values" + } + ] }, { "include": "$self" } ] }, - "less_builtin_functions": { - "match": "\\b(abs|acos|alpha|argb|asin|atan|average|blue|calc|ceil|color|contrast|convert|convert|cos|darken|data-uri|desaturate|difference|e|escape|exclusion|extract|fade|fadein|fadeout|floor|format|green|greyscale|hardlight|hsl|hsla|hsv|hsva|hsvhue|hsvsaturation|hsvvalue|hue|length|lighten|lightness|luma|max|min|mix|mod|multiply|negation|overlay|percentage|pi|pow|red|replace|round|saturate|saturation|screen|sin|softlight|spin|sqrt|tan|unit)\\b", - "name": "support.function.any-method.builtin.less" + "selector": { + "patterns": [ + { + "begin": "(?=[>~+/\\.*#a-zA-Z\\[&]|(\\:{1,2}[^\\s])|@\\{)", + "contentName": "meta.selector.less", + "end": "(?=@(?!\\{)|[{;])", + "patterns": [ + { + "include": "#comment-line" + }, + { + "include": "#selectors" + }, + { + "include": "#less-namespace-accessors" + }, + { + "include": "#less-variable-interpolation" + }, + { + "captures": { + "1": { + "name": "punctuation.separator.less" + } + }, + "match": "(\\!)\\s*important", + "name": "keyword.other.important.less" + } + ] + } + ] + }, + "selectors": { + "patterns": [ + { + "match": "\\b([a-z](?:(?:[-_a-z0-9\\x{00B7}]|\\\\\\.|[[\\x{00C0}-\\x{00D6}][\\x{00D8}-\\x{00F6}][\\x{00F8}-\\x{02FF}][\\x{0300}-\\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}]]))*-(?:(?:[-_a-z0-9\\x{00B7}]|\\\\\\.|[[\\x{00C0}-\\x{00D6}][\\x{00D8}-\\x{00F6}][\\x{00F8}-\\x{02FF}][\\x{0300}-\\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}]]))*)\\b", + "name": "entity.name.tag.custom.less" + }, + { + "match": "(?x)\\b( a | abbr | acronym | address | applet | area | article | aside | audio | b | base | basefont | bdi | bdo | big | blockquote | body | br | button | canvas | caption | circle | cite | clipPath | code | col | colgroup | content | data | dataList | dd | defs | del | details | dfn | dialog | dir | div | dl | dt | element | ellipse | em | embed | eventsource | fieldset | figcaption | figure | filter | footer | foreignObject | form | frame | frameset | g | glyph | glyphRef | h1 | h2 | h3 | h4 | h5 | h6 | head | header | hgroup | hr | html | i | iframe | image | img | input | ins | isindex | kbd | keygen | label | legend | li | line | linearGradient | link | main | map | mark | marker | mask | menu | meta | meter | nav | noframes | noscript | object | ol | optgroup | option | output | p | param | path | pattern | picture | polygon | polyline | pre | progress | q | radialGradient | rect | rp | ruby | rt | rtc | s | samp | script | section | select | shadow | small | source | span | stop | strike | strong | style | sub | summary | sup | svg | switch | symbol | table | tbody | td | template | textarea | textPath | tfoot | th | thead | time | title | tr | track | tref | tspan | tt | u | ul | use | var | video | wbr | xmp )\\b", + "name": "entity.name.tag.less" + }, + { + "begin": "(\\.)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "(?![-\\w]|[^\\x{00}-\\x{9f}]|\\\\([A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9])|(\\@(?=\\{)))", + "name": "entity.other.attribute-name.class.less", + "patterns": [ + { + "include": "#less-variable-interpolation" + } + ] + }, + { + "begin": "(#)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "(?![-\\w]|[^\\x{00}-\\x{9f}]|\\\\([A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9])|(\\@(?=\\{)))", + "name": "entity.other.attribute-name.id.less", + "patterns": [ + { + "include": "#less-variable-interpolation" + } + ] + }, + { + "begin": "(&)", + "beginCaptures": { + "1": { + "name": "punctuation.definition.entity.less" + } + }, + "contentName": "entity.other.attribute-name.parent.less", + "end": "(?![-\\w]|[^\\x{00}-\\x{9f}]|\\\\([A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9])|(\\@(?=\\{)))", + "name": "entity.other.attribute-name.parent.less", + "patterns": [ + { + "include": "#less-variable-interpolation" + }, + { + "include": "#selectors" + } + ] + }, + { + "include": "#pseudo-elements" + }, + { + "include": "#pseudo-classes" + }, + { + "include": "#less-extend" + }, + { + "match": "(?!\\+_?:)(?:>{1,3}|[~+])(?![>~+;}])", + "name": "punctuation.separator.combinator.less" + }, + { + "match": "((?:>{1,3}|[~+])){2,}", + "name": "invalid.illegal.combinator.less" + }, + { + "match": "\\/deep\\/", + "name": "invalid.illegal.combinator.less" + }, + { + "begin": "\\[", + "captures": { + "0": { + "name": "punctuation.definition.entity.less" + } + }, + "end": "\\]", + "name": "meta.attribute-selector.less", + "patterns": [ + { + "include": "#less-variable-interpolation" + }, + { + "include": "#qualified-name" + }, + { + "match": "(-?(?:[[_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]))*)", + "name": "entity.other.attribute-name.less" + }, + { + "begin": "\\s*([~*|^$]?=)\\s*", + "captures": { + "1": { + "name": "keyword.operator.attribute-selector.less" + } + }, + "end": "(?=(\\s|\\]))", + "patterns": [ + { + "include": "#less-variable-interpolation" + }, + { + "match": "[^\\s\\]\\['\"]", + "name": "string.unquoted.less" + }, + { + "include": "#literal-string" + }, + { + "captures": { + "1": { + "name": "keyword.other.less" + } + }, + "match": "(?:\\s+([iI]))?" + }, + { + "match": "\\]", + "name": "punctuation.definition.entity.less" + } + ] + } + ] + }, + { + "captures": { + "1": { + "name": "punctuation.definition.arbitrary-repetition.less" + } + }, + "match": "\\s*(?:(,))" + }, + { + "match": "\\*", + "name": "entity.name.tag.wildcard.less" + } + ] + }, + "shape-functions": { + "patterns": [ + { + "begin": "\\b(rect)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.shape.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": [ + { + "match": "\\bauto\\b", + "name": "support.constant.property-value.less" + }, + { + "include": "#length-type" + }, + { + "include": "#comma-delimiter" + } + ] + } + ] + }, + { + "begin": "\\b(inset)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.shape.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": [ + { + "match": "\\bround\\b", + "name": "keyword.other.less" + }, + { + "include": "#length-type" + }, + { + "include": "#percentage-type" + } + ] + } + ] + }, + { + "begin": "\\b(circle|ellipse)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.shape.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": [ + { + "match": "\\bat\\b", + "name": "keyword.other.less" + }, + { + "match": "\\b(top|right|bottom|left|center|closest-side|farthest-side)\\b", + "name": "support.constant.property-value.less" + }, + { + "include": "#length-type" + }, + { + "include": "#percentage-type" + } + ] + } + ] + }, + { + "begin": "\\b(polygon)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.shape.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": [ + { + "match": "\\b(nonzero|evenodd)\\b", + "name": "support.constant.property-value.less" + }, + { + "include": "#length-type" + }, + { + "include": "#percentage-type" + } + ] + } + ] + } + ] + }, + "steps-function": { + "begin": "\\b(steps)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.timing.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": "#comma-delimiter" + }, + { + "include": "#integer-type" + }, + { + "match": "(end|middle|start)", + "name": "support.keyword.timing-direction.less" + } + ] + } + ] + }, + "string-content": { + "patterns": [ + { + "include": "#less-variable-interpolation" + }, + { + "match": "\\\\\\s*\\n", + "name": "constant.character.escape.newline.less" + }, + { + "match": "\\\\(\\h{1,6}|.)", + "name": "constant.character.escape.less" + } + ] + }, + "symbols-function": { + "begin": "\\b(symbols)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.counter.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": [ + { + "match": "\\b(cyclic|numeric|alphabetic|symbolic|fixed)\\b", + "name": "support.constant.symbol-type.less" + }, + { + "include": "#comma-delimiter" + }, + { + "include": "#literal-string" + }, + { + "include": "#image-type" + } + ] + } + ] + }, + "time-type": { + "captures": { + "1": { + "name": "keyword.other.unit.less" + } + }, + "match": "(?i:[-+]?(?:(?:\\d*\\.\\d+(?:[eE](?:[-+]?\\d+))*)|(?:[-+]?\\d+))(s|ms))\\b", + "name": "constant.numeric.less" + }, + "transform-functions": { + "patterns": [ + { + "begin": "\\b(matrix3d|scale3d|matrix|scale)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.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": "#comma-delimiter" + }, + { + "include": "#number-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(translate(3d)?)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.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": "#comma-delimiter" + }, + { + "include": "#percentage-type" + }, + { + "include": "#length-type" + }, + { + "include": "#number-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(translate[XY])(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.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": "#percentage-type" + }, + { + "include": "#length-type" + }, + { + "include": "#number-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(rotate[XYZ]?|skew[XY])(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.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": "#angle-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#calc-function" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(skew)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.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": "#comma-delimiter" + }, + { + "include": "#angle-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#calc-function" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(translateZ|perspective)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.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": "#length-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#calc-function" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(rotate3d)(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.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": "#comma-delimiter" + }, + { + "include": "#angle-type" + }, + { + "include": "#number-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#calc-function" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + { + "begin": "\\b(scale[XYZ])(?=\\()", + "beginCaptures": { + "0": { + "name": "support.function.transform.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": "#comma-delimiter" + }, + { + "include": "#number-type" + }, + { + "include": "#less-variables" + }, + { + "include": "#calc-function" + }, + { + "include": "#var-function" + } + ] + } + ] + } + ] + }, + "unicode-range": { + "captures": { + "1": { + "name": "support.constant.unicode-range.prefix.less" + }, + "2": { + "name": "constant.codepoint-range.less" + }, + "3": { + "name": "punctuation.section.range.less" + } + }, + "match": "(?i)(u\\+)([0-9a-f?]{1,6}(?:(-)[0-9a-f]{1,6})?)", + "name": "support.unicode-range.less" + }, + "unquoted-string": { + "match": "[^\\s'\"]", + "name": "string.unquoted.less" + }, + "url-function": { + "begin": "\\b(url)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.url.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": "#less-variables" + }, + { + "include": "#literal-string" + }, + { + "include": "#unquoted-string" + }, + { + "include": "#var-function" + } + ] + } + ] + }, + "var-function": { + "patterns": [ + { + "begin": "\\b(var)(?=\\()", + "beginCaptures": { + "1": { + "name": "support.function.var.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": "#comma-delimiter" + }, + { + "include": "#custom-property-name" + }, + { + "include": "#less-variables" + } + ] + } + ] + } + ] + }, + "vendor-prefix": { + "match": "-(?:webkit|moz(-osx)?|ms|o)-", + "name": "support.type.vendor-prefix.less" } } } \ No newline at end of file diff --git a/extensions/theme-defaults/themes/dark_vs.json b/extensions/theme-defaults/themes/dark_vs.json index 54d69be0068..543e4efcecd 100644 --- a/extensions/theme-defaults/themes/dark_vs.json +++ b/extensions/theme-defaults/themes/dark_vs.json @@ -94,7 +94,10 @@ } }, { - "scope": "entity.name.tag.css", + "scope": [ + "entity.name.tag.css", + "entity.name.tag.less" + ], "settings": { "foreground": "#d7ba7d" } @@ -108,10 +111,11 @@ { "scope": [ "entity.other.attribute-name.class.css", - "entity.other.attribute-name.class.mixin.css", + "source.css entity.other.attribute-name.class", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", - "entity.other.attribute-name.pseudo-class.css", + "entity.other.attribute-name.parent.less", + "source.css entity.other.attribute-name.pseudo-class", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" @@ -306,9 +310,7 @@ "scope": [ "support.type.vendored.property-name", "support.type.property-name", - "variable.css", - "variable.scss", - "variable.other.less", + "source.css variable", "source.coffee.embedded" ], "settings": { diff --git a/extensions/theme-defaults/themes/hc_black.json b/extensions/theme-defaults/themes/hc_black.json index 46ac7e671f8..ebb49d98644 100644 --- a/extensions/theme-defaults/themes/hc_black.json +++ b/extensions/theme-defaults/themes/hc_black.json @@ -86,7 +86,10 @@ } }, { - "scope": "entity.name.tag.css", + "scope": [ + "entity.name.tag.css", + "entity.name.tag.less" + ], "settings": { "foreground": "#d7ba7d" } @@ -100,10 +103,11 @@ { "scope": [ "entity.other.attribute-name.class.css", - "entity.other.attribute-name.class.mixin.css", + "source.css entity.other.attribute-name.class", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", - "entity.other.attribute-name.pseudo-class.css", + "entity.other.attribute-name.parent.less", + "source.css entity.other.attribute-name.pseudo-class", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" @@ -266,9 +270,7 @@ "scope": [ "support.type.vendored.property-name", "support.type.property-name", - "variable.css", - "variable.scss", - "variable.other.less", + "source.css variable", "source.coffee.embedded" ], "settings": { diff --git a/extensions/theme-defaults/themes/hc_light.json b/extensions/theme-defaults/themes/hc_light.json index aaf0e2f9cf3..460f26ad738 100644 --- a/extensions/theme-defaults/themes/hc_light.json +++ b/extensions/theme-defaults/themes/hc_light.json @@ -80,10 +80,11 @@ { "scope": [ "entity.other.attribute-name.class.css", - "entity.other.attribute-name.class.mixin.css", + "source.css entity.other.attribute-name.class", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", - "entity.other.attribute-name.pseudo-class.css", + "entity.other.attribute-name.parent.less", + "source.css entity.other.attribute-name.pseudo-class", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" @@ -279,9 +280,7 @@ "scope": [ "support.type.vendored.property-name", "support.type.property-name", - "variable.css", - "variable.scss", - "variable.other.less", + "source.css variable", "source.coffee.embedded" ], "settings": { diff --git a/extensions/theme-defaults/themes/light_vs.json b/extensions/theme-defaults/themes/light_vs.json index b093cc73ca3..c67d2932a16 100644 --- a/extensions/theme-defaults/themes/light_vs.json +++ b/extensions/theme-defaults/themes/light_vs.json @@ -114,10 +114,11 @@ { "scope": [ "entity.other.attribute-name.class.css", - "entity.other.attribute-name.class.mixin.css", + "source.css entity.other.attribute-name.class", "entity.other.attribute-name.id.css", "entity.other.attribute-name.parent-selector.css", - "entity.other.attribute-name.pseudo-class.css", + "entity.other.attribute-name.parent.less", + "source.css entity.other.attribute-name.pseudo-class", "entity.other.attribute-name.pseudo-element.css", "source.css.less entity.other.attribute-name.id", "entity.other.attribute-name.scss" @@ -327,9 +328,7 @@ "scope": [ "support.type.vendored.property-name", "support.type.property-name", - "variable.css", - "variable.scss", - "variable.other.less", + "source.css variable", "source.coffee.embedded" ], "settings": { diff --git a/extensions/theme-quietlight/themes/quietlight-color-theme.json b/extensions/theme-quietlight/themes/quietlight-color-theme.json index 3705ed48608..0b6cd0be740 100644 --- a/extensions/theme-quietlight/themes/quietlight-color-theme.json +++ b/extensions/theme-quietlight/themes/quietlight-color-theme.json @@ -252,7 +252,8 @@ "meta.selector", "meta.selector entity", "meta.selector entity punctuation", - "entity.name.tag.css" + "entity.name.tag.css", + "entity.name.tag.less" ], "settings": { "foreground": "#7A3E9D" diff --git a/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json b/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json index 840a1764bf1..28fb8cd7f28 100644 --- a/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json +++ b/extensions/theme-tomorrow-night-blue/themes/tomorrow-night-blue-color-theme.json @@ -140,7 +140,10 @@ }, { "name": "Keyword, Storage", - "scope": "keyword, storage, storage.type, entity.name.tag.css", + "scope": [ + "keyword, storage, storage.type, entity.name.tag.css", + "entity.name.tag.less" + ], "settings": { "fontStyle": "", "foreground": "#EBBBFF" diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json index 401b9a4da03..20b69bfc674 100644 --- a/extensions/vscode-api-tests/package.json +++ b/extensions/vscode-api-tests/package.json @@ -53,8 +53,7 @@ "workspaceTrust", "telemetry", "testingActiveProfile", - "windowActivity", - "interactiveUserActions" + "windowActivity" ], "private": true, "activationEvents": [], diff --git a/extensions/vscode-colorize-tests/test/colorize-results/14119_less.json b/extensions/vscode-colorize-tests/test/colorize-results/14119_less.json index befc3ca8321..66807538fed 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/14119_less.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/14119_less.json @@ -1,7 +1,7 @@ [ { "c": "#", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id punctuation.definition.entity.css", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less punctuation.definition.entity.less", "r": { "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", "light_plus": "source.css.less entity.other.attribute-name.id: #800000", @@ -15,7 +15,7 @@ }, { "c": "f", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less", "r": { "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", "light_plus": "source.css.less entity.other.attribute-name.id: #800000", @@ -29,7 +29,7 @@ }, { "c": "(", - "t": "source.css.less meta.brace.round.css", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -43,35 +43,35 @@ }, { "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "hm", - "t": "source.css.less variable.other.less", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -85,7 +85,7 @@ }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -99,7 +99,7 @@ }, { "c": "\"", - "t": "source.css.less string.quoted.double.css punctuation.definition.string.begin.css", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less string.quoted.double.less punctuation.definition.string.begin.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -113,7 +113,7 @@ }, { "c": "broken highlighting in VS Code", - "t": "source.css.less string.quoted.double.css", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less string.quoted.double.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -127,7 +127,7 @@ }, { "c": "\"", - "t": "source.css.less string.quoted.double.css punctuation.definition.string.end.css", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less string.quoted.double.less punctuation.definition.string.end.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -141,7 +141,7 @@ }, { "c": ")", - "t": "source.css.less meta.brace.round.css", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -155,7 +155,7 @@ }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.selector.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -169,7 +169,7 @@ }, { "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -183,7 +183,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -197,21 +197,21 @@ }, { "c": "content", - "t": "source.css.less meta.property-list.css entity.name.tag.css", + "t": "source.css.less meta.property-list.less support.type.property-name.less", "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", - "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", - "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", - "hc_light": "entity.name.tag: #0F4A85", - "light_modern": "entity.name.tag: #800000" + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" } }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -225,7 +225,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -239,7 +239,7 @@ }, { "c": "\"", - "t": "source.css.less meta.property-list.css meta.property-value.css string.quoted.double.css punctuation.definition.string.begin.css", + "t": "source.css.less meta.property-list.less meta.property-value.less string.quoted.double.less punctuation.definition.string.begin.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -253,7 +253,7 @@ }, { "c": "\"", - "t": "source.css.less meta.property-list.css meta.property-value.css string.quoted.double.css punctuation.definition.string.end.css", + "t": "source.css.less meta.property-list.less meta.property-value.less string.quoted.double.less punctuation.definition.string.end.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -267,7 +267,7 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -281,7 +281,7 @@ }, { "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", + "t": "source.css.less punctuation.definition.block.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_less.json b/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_less.json index 859e808c155..856f013541b 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_less.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_less.json @@ -1,35 +1,35 @@ [ { "c": ":", - "t": "source.css.less entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", + "t": "source.css.less meta.selector.less meta.function-call.less punctuation.definition.entity.less", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "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": "root", - "t": "source.css.less entity.other.attribute-name.pseudo-class.css", + "t": "source.css.less meta.selector.less meta.function-call.less entity.other.attribute-name.pseudo-class.less", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.selector.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -43,7 +43,7 @@ }, { "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -57,7 +57,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -71,35 +71,35 @@ }, { "c": "--", - "t": "source.css.less meta.property-list.css variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.property-list.less support.type.custom-property.less punctuation.definition.custom-property.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { "c": "spacing-unit", - "t": "source.css.less meta.property-list.css variable.other.less", + "t": "source.css.less meta.property-list.less support.type.custom-property.less support.type.custom-property.name.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -113,7 +113,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -127,7 +127,7 @@ }, { "c": "6", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", + "t": "source.css.less meta.property-list.less meta.property-value.less constant.numeric.less", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #098658", @@ -141,7 +141,7 @@ }, { "c": "px", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.px.css", + "t": "source.css.less meta.property-list.less meta.property-value.less constant.numeric.less keyword.other.unit.less", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #098658", @@ -155,7 +155,7 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -169,7 +169,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -183,35 +183,35 @@ }, { "c": "--", - "t": "source.css.less meta.property-list.css variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.property-list.less support.type.custom-property.less punctuation.definition.custom-property.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { "c": "cell-padding", - "t": "source.css.less meta.property-list.css variable.other.less", + "t": "source.css.less meta.property-list.less support.type.custom-property.less support.type.custom-property.name.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -225,7 +225,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -239,7 +239,7 @@ }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -253,7 +253,7 @@ }, { "c": "4", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less constant.numeric.less", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #098658", @@ -267,7 +267,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -281,7 +281,7 @@ }, { "c": "*", - "t": "source.css.less meta.property-list.css meta.property-value.css keyword.operator.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less keyword.operator.arithmetic.less", "r": { "dark_plus": "keyword.operator: #D4D4D4", "light_plus": "keyword.operator: #000000", @@ -294,8 +294,8 @@ } }, { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "c": " var", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -307,23 +307,9 @@ "light_modern": "default: #3B3B3B" } }, - { - "c": "var", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css support.function.misc.css", - "r": { - "dark_plus": "support.function: #DCDCAA", - "light_plus": "support.function: #795E26", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA", - "dark_modern": "support.function: #DCDCAA", - "hc_light": "support.function: #5E2CBC", - "light_modern": "support.function: #795E26" - } - }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css punctuation.section.function.begin.bracket.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -336,22 +322,50 @@ } }, { - "c": "--spacing-unit", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css variable.argument.css", + "c": "--", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less keyword.operator.arithmetic.less", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" } }, { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css punctuation.section.function.end.bracket.round.css", + "c": "spacing", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less keyword.operator.arithmetic.less", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" + } + }, + { + "c": "unit", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -365,7 +379,21 @@ }, { "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less meta.group.less punctuation.definition.group.end.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -379,7 +407,7 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -393,7 +421,7 @@ }, { "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", + "t": "source.css.less punctuation.definition.block.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -407,21 +435,21 @@ }, { "c": "body", - "t": "source.css.less entity.name.tag.css", + "t": "source.css.less meta.selector.less entity.name.tag.less", "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", + "dark_plus": "entity.name.tag.less: #D7BA7D", "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", + "dark_vs": "entity.name.tag.less: #D7BA7D", "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", + "hc_black": "entity.name.tag.less: #D7BA7D", + "dark_modern": "entity.name.tag.less: #D7BA7D", "hc_light": "entity.name.tag: #0F4A85", "light_modern": "entity.name.tag: #800000" } }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.selector.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -435,7 +463,7 @@ }, { "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -449,7 +477,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -463,7 +491,7 @@ }, { "c": "padding-left", - "t": "source.css.less meta.property-list.css support.type.property-name.css", + "t": "source.css.less meta.property-list.less support.type.property-name.less", "r": { "dark_plus": "support.type.property-name: #9CDCFE", "light_plus": "support.type.property-name: #E50000", @@ -477,7 +505,7 @@ }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -491,7 +519,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -505,7 +533,7 @@ }, { "c": "calc", - "t": "source.css.less meta.property-list.css meta.property-value.css support.function.any-method.builtin.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less support.function.calc.less", "r": { "dark_plus": "support.function: #DCDCAA", "light_plus": "support.function: #795E26", @@ -519,7 +547,7 @@ }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -533,7 +561,7 @@ }, { "c": "4", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #098658", @@ -547,7 +575,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -561,7 +589,7 @@ }, { "c": "*", - "t": "source.css.less meta.property-list.css meta.property-value.css keyword.operator.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less keyword.operator.arithmetic.less", "r": { "dark_plus": "keyword.operator: #D4D4D4", "light_plus": "keyword.operator: #000000", @@ -575,7 +603,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -589,7 +617,7 @@ }, { "c": "var", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css support.function.misc.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less support.function.var.less", "r": { "dark_plus": "support.function: #DCDCAA", "light_plus": "support.function: #795E26", @@ -603,7 +631,7 @@ }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css punctuation.section.function.begin.bracket.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -616,22 +644,36 @@ } }, { - "c": "--spacing-unit", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css variable.argument.css", + "c": "--", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less support.type.custom-property.less punctuation.definition.custom-property.less", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", "dark_vs": "default: #D4D4D4", "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" + } + }, + { + "c": "spacing-unit", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less support.type.custom-property.less support.type.custom-property.name.less", + "r": { + "dark_plus": "support.type: #4EC9B0", + "light_plus": "support.type: #267F99", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.type: #4EC9B0", + "dark_modern": "support.type: #4EC9B0", + "hc_light": "support.type: #185E73", + "light_modern": "support.type: #267F99" } }, { "c": ",", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css punctuation.separator.list.comma.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less punctuation.separator.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -644,50 +686,8 @@ } }, { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css", - "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": "5", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css constant.numeric.css", - "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": "px", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.function.variable.css punctuation.section.function.end.bracket.round.css", + "c": " 5px", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -701,7 +701,21 @@ }, { "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less meta.function-call.less punctuation.definition.group.end.less", + "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.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -715,7 +729,7 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -729,7 +743,7 @@ }, { "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", + "t": "source.css.less punctuation.definition.block.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_scss.json b/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_scss.json index f5cddc27d06..e78169f5e01 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_scss.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-cssvariables_scss.json @@ -3,28 +3,28 @@ "c": ":", "t": "source.css.scss entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "root", "t": "source.css.scss entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -73,14 +73,14 @@ "c": "--spacing-unit", "t": "source.css.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -171,14 +171,14 @@ "c": "--cell-padding", "t": "source.css.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -311,14 +311,14 @@ "c": "--spacing-unit", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -591,14 +591,14 @@ "c": "--spacing-unit", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test-variables_css.json b/extensions/vscode-colorize-tests/test/colorize-results/test-variables_css.json index 8819269523a..a20f8fe4a3b 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test-variables_css.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test-variables_css.json @@ -3,28 +3,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "root", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -73,14 +73,14 @@ "c": "--spacing-unit", "t": "source.css meta.property-list.css variable.css", "r": { - "dark_plus": "variable.css: #9CDCFE", - "light_plus": "variable.css: #E50000", - "dark_vs": "variable.css: #9CDCFE", - "light_vs": "variable.css: #E50000", - "hc_black": "variable.css: #D4D4D4", - "dark_modern": "variable.css: #9CDCFE", - "hc_light": "variable.css: #264F78", - "light_modern": "variable.css: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -171,14 +171,14 @@ "c": "--cell-padding", "t": "source.css meta.property-list.css variable.css", "r": { - "dark_plus": "variable.css: #9CDCFE", - "light_plus": "variable.css: #E50000", - "dark_vs": "variable.css: #9CDCFE", - "light_vs": "variable.css: #E50000", - "hc_black": "variable.css: #D4D4D4", - "dark_modern": "variable.css: #9CDCFE", - "hc_light": "variable.css: #264F78", - "light_modern": "variable.css: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -283,14 +283,14 @@ "c": "--spacing-unit", "t": "source.css meta.property-list.css meta.property-value.css meta.function.variable.css variable.argument.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -563,14 +563,14 @@ "c": "--spacing-unit", "t": "source.css meta.property-list.css meta.property-value.css meta.function.calc.css meta.function.variable.css variable.argument.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_css.json b/extensions/vscode-colorize-tests/test/colorize-results/test_css.json index 78a5ca00d07..8d4b8a2a981 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_css.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_css.json @@ -1501,14 +1501,14 @@ "c": "blossoms.jpg", "t": "source.css meta.property-list.css meta.property-value.css meta.function.url.css variable.parameter.url.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -3601,28 +3601,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "link", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -3951,28 +3951,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "visited", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -4385,28 +4385,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "hover", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -4441,28 +4441,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "focus", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -4497,28 +4497,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "active", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -5071,14 +5071,14 @@ "c": "zen-bg.jpg", "t": "source.css meta.property-list.css meta.property-value.css meta.function.url.css variable.parameter.url.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6023,14 +6023,14 @@ "c": "h1.gif", "t": "source.css meta.property-list.css meta.property-value.css meta.function.url.css variable.parameter.url.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -8879,28 +8879,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "link", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -8963,28 +8963,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "visited", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -9929,14 +9929,14 @@ "c": "paper-bg.jpg", "t": "source.css meta.property-list.css meta.property-value.css meta.function.url.css variable.parameter.url.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10447,28 +10447,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "link", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -10699,28 +10699,28 @@ "c": ":", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "visited", "t": "source.css meta.selector.css entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -11049,14 +11049,14 @@ "c": "cr2.gif", "t": "source.css meta.property-list.css meta.property-value.css meta.function.url.css variable.parameter.url.css", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_less.json b/extensions/vscode-colorize-tests/test/colorize-results/test_less.json index 6937f0e26dc..08d8b9f4fb5 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_less.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_less.json @@ -1,7 +1,7 @@ [ { "c": "@", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less punctuation.definition.keyword.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less punctuation.definition.keyword.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -15,7 +15,7 @@ }, { "c": "import", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -29,7 +29,7 @@ }, { "c": " ", - "t": "source.css.less meta.at-rule.import.css", + "t": "source.css.less meta.at-rule.import.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -43,7 +43,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.begin.css", + "t": "source.css.less meta.at-rule.import.less string.quoted.double.less punctuation.definition.string.begin.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -57,7 +57,7 @@ }, { "c": "mystyle.css", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css", + "t": "source.css.less meta.at-rule.import.less string.quoted.double.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -71,7 +71,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.end.css", + "t": "source.css.less meta.at-rule.import.less string.quoted.double.less punctuation.definition.string.end.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -85,7 +85,7 @@ }, { "c": ";", - "t": "source.css.less meta.at-rule.import.css punctuation.terminator.rule.css", + "t": "source.css.less meta.at-rule.import.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -99,7 +99,7 @@ }, { "c": "@", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less punctuation.definition.keyword.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less punctuation.definition.keyword.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -113,7 +113,7 @@ }, { "c": "import", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -126,8 +126,8 @@ } }, { - "c": " url", - "t": "source.css.less meta.at-rule.import.css", + "c": " ", + "t": "source.css.less meta.at-rule.import.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -139,9 +139,23 @@ "light_modern": "default: #3B3B3B" } }, + { + "c": "url", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less support.function.url.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, { "c": "(", - "t": "source.css.less meta.at-rule.import.css meta.brace.round.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -155,7 +169,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.begin.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less punctuation.definition.string.begin.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -169,7 +183,7 @@ }, { "c": "mystyle.css", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -183,7 +197,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.end.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less punctuation.definition.string.end.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -197,7 +211,7 @@ }, { "c": ")", - "t": "source.css.less meta.at-rule.import.css meta.brace.round.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -211,7 +225,7 @@ }, { "c": ";", - "t": "source.css.less meta.at-rule.import.css punctuation.terminator.rule.css", + "t": "source.css.less meta.at-rule.import.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -225,7 +239,7 @@ }, { "c": "@", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less punctuation.definition.keyword.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less punctuation.definition.keyword.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -239,7 +253,7 @@ }, { "c": "import", - "t": "source.css.less meta.at-rule.import.css keyword.control.at-rule.import.less", + "t": "source.css.less meta.at-rule.import.less keyword.control.at-rule.import.less", "r": { "dark_plus": "keyword.control: #C586C0", "light_plus": "keyword.control: #AF00DB", @@ -252,8 +266,8 @@ } }, { - "c": " url", - "t": "source.css.less meta.at-rule.import.css", + "c": " ", + "t": "source.css.less meta.at-rule.import.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -265,9 +279,23 @@ "light_modern": "default: #3B3B3B" } }, + { + "c": "url", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less support.function.url.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, { "c": "(", - "t": "source.css.less meta.at-rule.import.css meta.brace.round.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -281,7 +309,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.begin.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less punctuation.definition.string.begin.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -295,7 +323,7 @@ }, { "c": "bluish.css", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -309,7 +337,7 @@ }, { "c": "\"", - "t": "source.css.less meta.at-rule.import.css string.quoted.double.css punctuation.definition.string.end.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less string.quoted.double.less punctuation.definition.string.end.less", "r": { "dark_plus": "string: #CE9178", "light_plus": "string: #A31515", @@ -323,7 +351,7 @@ }, { "c": ")", - "t": "source.css.less meta.at-rule.import.css meta.brace.round.css", + "t": "source.css.less meta.at-rule.import.less meta.function-call.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -336,8 +364,8 @@ } }, { - "c": " projection", - "t": "source.css.less meta.at-rule.import.css", + "c": " ", + "t": "source.css.less meta.at-rule.import.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -349,9 +377,23 @@ "light_modern": "default: #3B3B3B" } }, + { + "c": "projection", + "t": "source.css.less meta.at-rule.import.less support.constant.media.less", + "r": { + "dark_plus": "support.constant.media: #CE9178", + "light_plus": "support.constant.media: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "support.constant.media: #0451A5", + "hc_black": "support.constant.media: #CE9178", + "dark_modern": "support.constant.media: #CE9178", + "hc_light": "support.constant.media: #0451A5", + "light_modern": "support.constant.media: #0451A5" + } + }, { "c": ",", - "t": "source.css.less meta.at-rule.import.css punctuation.separator.list.comma.css", + "t": "source.css.less meta.at-rule.import.less punctuation.definition.arbitrary-repetition.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -364,8 +406,8 @@ } }, { - "c": " tv", - "t": "source.css.less meta.at-rule.import.css", + "c": " ", + "t": "source.css.less meta.at-rule.import.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -377,9 +419,23 @@ "light_modern": "default: #3B3B3B" } }, + { + "c": "tv", + "t": "source.css.less meta.at-rule.import.less support.constant.media.less", + "r": { + "dark_plus": "support.constant.media: #CE9178", + "light_plus": "support.constant.media: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "support.constant.media: #0451A5", + "hc_black": "support.constant.media: #CE9178", + "dark_modern": "support.constant.media: #CE9178", + "hc_light": "support.constant.media: #0451A5", + "light_modern": "support.constant.media: #0451A5" + } + }, { "c": ";", - "t": "source.css.less meta.at-rule.import.css punctuation.terminator.rule.css", + "t": "source.css.less meta.at-rule.import.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -393,35 +449,35 @@ }, { "c": "@", - "t": "source.css.less variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "base", - "t": "source.css.less variable.other.less", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", + "t": "source.css.less meta.property-value.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -435,7 +491,7 @@ }, { "c": " ", - "t": "source.css.less", + "t": "source.css.less meta.property-value.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -448,1114 +504,36 @@ } }, { - "c": "#f938ab", - "t": "source.css.less constant.other.rgb-value.css", + "c": "#", + "t": "source.css.less meta.property-value.less constant.other.color.rgb-value.less punctuation.definition.constant.less", "r": { - "dark_plus": "constant.other.rgb-value: #CE9178", - "light_plus": "constant.other.rgb-value: #0451A5", + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", "dark_vs": "default: #D4D4D4", - "light_vs": "constant.other.rgb-value: #0451A5", - "hc_black": "constant.other.rgb-value: #CE9178", - "dark_modern": "constant.other.rgb-value: #CE9178", - "hc_light": "constant.other.rgb-value: #0451A5", - "light_modern": "constant.other.rgb-value: #0451A5" + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" + } + }, + { + "c": "f938ab", + "t": "source.css.less meta.property-value.less constant.other.color.rgb-value.less", + "r": { + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" } }, { "c": ";", - "t": "source.css.less punctuation.terminator.rule.css", - "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": ".box-shadow", - "t": "source.css.less entity.other.attribute-name.class.mixin.css", - "r": { - "dark_plus": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.mixin.css: #800000", - "dark_vs": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.mixin.css: #800000", - "hc_black": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.mixin.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" - } - }, - { - "c": "(", - "t": "source.css.less meta.brace.round.css", - "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.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "style", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ",", - "t": "source.css.less punctuation.separator.list.comma.css", - "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.css.less", - "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.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "c", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ")", - "t": "source.css.less meta.brace.round.css", - "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.css.less", - "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": "when", - "t": "source.css.less keyword.control.logical.operator.less", - "r": { - "dark_plus": "keyword.control: #C586C0", - "light_plus": "keyword.control: #AF00DB", - "dark_vs": "keyword.control: #569CD6", - "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0", - "dark_modern": "keyword.control: #C586C0", - "hc_light": "keyword.control: #B5200D", - "light_modern": "keyword.control: #AF00DB" - } - }, - { - "c": " ", - "t": "source.css.less", - "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.css.less meta.brace.round.css", - "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": "iscolor", - "t": "source.css.less support.function.type-checking.less", - "r": { - "dark_plus": "support.function: #DCDCAA", - "light_plus": "support.function: #795E26", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA", - "dark_modern": "support.function: #DCDCAA", - "hc_light": "support.function: #5E2CBC", - "light_modern": "support.function: #795E26" - } - }, - { - "c": "(", - "t": "source.css.less meta.brace.round.css", - "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.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "c", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "))", - "t": "source.css.less meta.brace.round.css", - "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.css.less", - "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.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "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", - "t": "source.css.less meta.property-list.css", - "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": "border-radius", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css", - "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.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "style", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "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.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "c", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", - "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.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "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": ".box-shadow", - "t": "source.css.less entity.other.attribute-name.class.mixin.css", - "r": { - "dark_plus": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.mixin.css: #800000", - "dark_vs": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.mixin.css: #800000", - "hc_black": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.mixin.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" - } - }, - { - "c": "(", - "t": "source.css.less meta.brace.round.css", - "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.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "style", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ",", - "t": "source.css.less punctuation.separator.list.comma.css", - "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.css.less", - "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.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "alpha", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", - "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.css.less", - "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": "50", - "t": "source.css.less constant.numeric.css", - "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.css.less constant.numeric.css keyword.other.unit.percentage.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.brace.round.css", - "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.css.less", - "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": "when", - "t": "source.css.less keyword.control.logical.operator.less", - "r": { - "dark_plus": "keyword.control: #C586C0", - "light_plus": "keyword.control: #AF00DB", - "dark_vs": "keyword.control: #569CD6", - "light_vs": "keyword.control: #0000FF", - "hc_black": "keyword.control: #C586C0", - "dark_modern": "keyword.control: #C586C0", - "hc_light": "keyword.control: #B5200D", - "light_modern": "keyword.control: #AF00DB" - } - }, - { - "c": " ", - "t": "source.css.less", - "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.css.less meta.brace.round.css", - "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": "isnumber", - "t": "source.css.less support.function.type-checking.less", - "r": { - "dark_plus": "support.function: #DCDCAA", - "light_plus": "support.function: #795E26", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA", - "dark_modern": "support.function: #DCDCAA", - "hc_light": "support.function: #5E2CBC", - "light_modern": "support.function: #795E26" - } - }, - { - "c": "(", - "t": "source.css.less meta.brace.round.css", - "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.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "alpha", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "))", - "t": "source.css.less meta.brace.round.css", - "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.css.less", - "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.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "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", - "t": "source.css.less meta.property-list.css", - "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": ".box-shadow", - "t": "source.css.less meta.property-list.css entity.other.attribute-name.class.mixin.css", - "r": { - "dark_plus": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.mixin.css: #800000", - "dark_vs": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.mixin.css: #800000", - "hc_black": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.mixin.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" - } - }, - { - "c": "(", - "t": "source.css.less meta.property-list.css meta.brace.round.css", - "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.css.less meta.property-list.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "style", - "t": "source.css.less meta.property-list.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ",", - "t": "source.css.less meta.property-list.css punctuation.separator.list.comma.css", - "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.css.less meta.property-list.css", - "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": "rgba", - "t": "source.css.less meta.property-list.css meta.function.color.css support.function.misc.css", - "r": { - "dark_plus": "support.function: #DCDCAA", - "light_plus": "support.function: #795E26", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "support.function: #DCDCAA", - "dark_modern": "support.function: #DCDCAA", - "hc_light": "support.function: #5E2CBC", - "light_modern": "support.function: #795E26" - } - }, - { - "c": "(", - "t": "source.css.less meta.property-list.css meta.function.color.css punctuation.section.function.begin.bracket.round.css", - "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": "0", - "t": "source.css.less meta.property-list.css meta.function.color.css constant.numeric.css", - "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.css.less meta.property-list.css meta.function.color.css punctuation.separator.list.comma.css", - "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.css.less meta.property-list.css meta.function.color.css", - "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": "0", - "t": "source.css.less meta.property-list.css meta.function.color.css constant.numeric.css", - "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.css.less meta.property-list.css meta.function.color.css punctuation.separator.list.comma.css", - "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.css.less meta.property-list.css meta.function.color.css", - "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": "0", - "t": "source.css.less meta.property-list.css meta.function.color.css constant.numeric.css", - "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.css.less meta.property-list.css meta.function.color.css punctuation.separator.list.comma.css", - "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.css.less meta.property-list.css meta.function.color.css", - "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": "alpha", - "t": "source.css.less meta.property-list.css meta.function.color.css support.constant.property-value.css", - "r": { - "dark_plus": "support.constant.property-value: #CE9178", - "light_plus": "support.constant.property-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "support.constant.property-value: #0451A5", - "hc_black": "support.constant.property-value: #CE9178", - "dark_modern": "support.constant.property-value: #CE9178", - "hc_light": "support.constant.property-value: #0451A5", - "light_modern": "support.constant.property-value: #0451A5" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.function.color.css punctuation.section.function.end.bracket.round.css", - "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.css.less meta.property-list.css meta.brace.round.css", - "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.css.less meta.property-list.css punctuation.terminator.rule.css", - "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.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", + "t": "source.css.less meta.property-value.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1569,35 +547,287 @@ }, { "c": ".", - "t": "source.css.less entity.other.attribute-name.class.css punctuation.definition.entity.css", + "t": "source.css.less meta.selector.less entity.other.attribute-name.class.less punctuation.definition.entity.less", "r": { - "dark_plus": "entity.other.attribute-name.class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.css: #800000", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "entity.other.attribute-name.class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" } }, { - "c": "box", - "t": "source.css.less entity.other.attribute-name.class.css", + "c": "box-shadow", + "t": "source.css.less meta.selector.less entity.other.attribute-name.class.less", "r": { - "dark_plus": "entity.other.attribute-name.class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.css: #800000", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "entity.other.attribute-name.class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "(", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.begin.less", + "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.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "style", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ",", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less punctuation.separator.less", + "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.css.less", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less", + "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.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "c", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ")", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.end.less", + "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.css.less meta.selector.less meta.conditional.guarded-namespace.less", + "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": "when", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less keyword.control.conditional.less", + "r": { + "dark_plus": "keyword.control: #C586C0", + "light_plus": "keyword.control: #AF00DB", + "dark_vs": "keyword.control: #569CD6", + "light_vs": "keyword.control: #0000FF", + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less", + "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.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less punctuation.definition.group.begin.less", + "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": "iscolor", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less support.function.type.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, + { + "c": "(", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less punctuation.definition.group.begin.less", + "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.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "c", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ")", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less punctuation.definition.group.end.less", + "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.css.less meta.selector.less meta.conditional.guarded-namespace.less punctuation.definition.group.end.less", + "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.css.less meta.selector.less meta.conditional.guarded-namespace.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1611,7 +841,7 @@ }, { "c": "{", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", + "t": "source.css.less meta.property-list.less punctuation.definition.block.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1625,7 +855,7 @@ }, { "c": "\t", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1638,8 +868,8 @@ } }, { - "c": "color", - "t": "source.css.less meta.property-list.css support.type.property-name.css", + "c": "border-radius", + "t": "source.css.less meta.property-list.less support.type.property-name.less", "r": { "dark_plus": "support.type.property-name: #9CDCFE", "light_plus": "support.type.property-name: #E50000", @@ -1653,7 +883,7 @@ }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1667,7 +897,931 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", + "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.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "style", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "@", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "c", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "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.css.less punctuation.definition.block.end.less", + "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.css.less meta.selector.less entity.other.attribute-name.class.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "box-shadow", + "t": "source.css.less meta.selector.less entity.other.attribute-name.class.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "(", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.begin.less", + "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.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "style", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ",", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less punctuation.separator.less", + "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.css.less meta.selector.less meta.group.less meta.property-value.less", + "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.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "alpha", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less punctuation.separator.key-value.less", + "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.css.less meta.selector.less meta.group.less meta.property-value.less meta.property-value.less", + "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": "50", + "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less constant.numeric.less", + "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.css.less meta.selector.less meta.group.less meta.property-value.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.selector.less meta.group.less punctuation.definition.group.end.less", + "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.css.less meta.selector.less meta.conditional.guarded-namespace.less", + "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": "when", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less keyword.control.conditional.less", + "r": { + "dark_plus": "keyword.control: #C586C0", + "light_plus": "keyword.control: #AF00DB", + "dark_vs": "keyword.control: #569CD6", + "light_vs": "keyword.control: #0000FF", + "hc_black": "keyword.control: #C586C0", + "dark_modern": "keyword.control: #C586C0", + "hc_light": "keyword.control: #B5200D", + "light_modern": "keyword.control: #AF00DB" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less", + "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.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less punctuation.definition.group.begin.less", + "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": "isnumber", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less support.function.type.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, + { + "c": "(", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less punctuation.definition.group.begin.less", + "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.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "alpha", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ")", + "t": "source.css.less meta.selector.less meta.conditional.guarded-namespace.less meta.group.less meta.function-call.less punctuation.definition.group.end.less", + "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.css.less meta.selector.less meta.conditional.guarded-namespace.less punctuation.definition.group.end.less", + "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.css.less meta.selector.less meta.conditional.guarded-namespace.less", + "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.css.less meta.property-list.less punctuation.definition.block.begin.less", + "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", + "t": "source.css.less meta.property-list.less", + "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.css.less meta.property-list.less meta.selector.less entity.other.attribute-name.class.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "box-shadow", + "t": "source.css.less meta.property-list.less meta.selector.less entity.other.attribute-name.class.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less punctuation.definition.group.begin.less", + "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.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "style", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ",", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less punctuation.separator.less", + "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.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less", + "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": "rgba", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less support.function.color.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less punctuation.definition.group.begin.less", + "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": "0", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less constant.numeric.less", + "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.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less punctuation.separator.less", + "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.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less", + "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": "0", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less constant.numeric.less", + "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.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less punctuation.separator.less", + "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.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less", + "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": "0", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less constant.numeric.less", + "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.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less punctuation.separator.less", + "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.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less", + "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.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "alpha", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.selector.less meta.group.less meta.property-value.less meta.function-call.less punctuation.definition.group.end.less", + "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.css.less meta.property-list.less meta.selector.less meta.group.less punctuation.definition.group.end.less", + "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.css.less meta.property-list.less punctuation.terminator.rule.less", + "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.css.less punctuation.definition.block.end.less", + "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.css.less meta.selector.less entity.other.attribute-name.class.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "box", + "t": "source.css.less meta.selector.less entity.other.attribute-name.class.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less", + "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.css.less meta.property-list.less punctuation.definition.block.begin.less", + "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", + "t": "source.css.less meta.property-list.less", + "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": "color", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1681,7 +1835,7 @@ }, { "c": "saturate", - "t": "source.css.less meta.property-list.css meta.property-value.css support.function.any-method.builtin.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less support.function.color-operation.less", "r": { "dark_plus": "support.function: #DCDCAA", "light_plus": "support.function: #795E26", @@ -1695,7 +1849,7 @@ }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1709,35 +1863,35 @@ }, { "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "base", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ",", - "t": "source.css.less meta.property-list.css meta.property-value.css punctuation.separator.list.comma.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.separator.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1751,7 +1905,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1765,7 +1919,7 @@ }, { "c": "5", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #098658", @@ -1779,7 +1933,7 @@ }, { "c": "%", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.percentage.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less keyword.other.unit.less", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #098658", @@ -1793,7 +1947,7 @@ }, { "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1807,7 +1961,7 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1821,7 +1975,7 @@ }, { "c": "\t", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1835,7 +1989,7 @@ }, { "c": "border-color", - "t": "source.css.less meta.property-list.css support.type.property-name.css", + "t": "source.css.less meta.property-list.less support.type.property-name.less", "r": { "dark_plus": "support.type.property-name: #9CDCFE", "light_plus": "support.type.property-name: #E50000", @@ -1849,7 +2003,7 @@ }, { "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1863,7 +2017,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css", + "t": "source.css.less meta.property-list.less meta.property-value.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -1877,2443 +2031,7 @@ }, { "c": "lighten", - "t": "source.css.less meta.property-list.css meta.property-value.css support.constant.property-value.css", - "r": { - "dark_plus": "support.constant.property-value: #CE9178", - "light_plus": "support.constant.property-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "support.constant.property-value: #0451A5", - "hc_black": "support.constant.property-value: #CE9178", - "dark_modern": "support.constant.property-value: #CE9178", - "hc_light": "support.constant.property-value: #0451A5", - "light_modern": "support.constant.property-value: #0451A5" - } - }, - { - "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "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.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "base", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ",", - "t": "source.css.less meta.property-list.css meta.property-value.css punctuation.separator.list.comma.css", - "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.css.less meta.property-list.css meta.property-value.css", - "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": "30", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", - "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.css.less meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.percentage.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "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.css.less meta.property-list.css punctuation.terminator.rule.css", - "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", - "t": "source.css.less meta.property-list.css", - "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": "div", - "t": "source.css.less meta.property-list.css entity.name.tag.css", - "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", - "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", - "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", - "hc_light": "entity.name.tag: #0F4A85", - "light_modern": "entity.name.tag: #800000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "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\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "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": ".box-shadow", - "t": "source.css.less meta.property-list.css meta.property-list.css entity.other.attribute-name.class.mixin.css", - "r": { - "dark_plus": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.class.mixin.css: #800000", - "dark_vs": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.mixin.css: #800000", - "hc_black": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.class.mixin.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.class.mixin.css: #0F4A85", - "light_modern": "entity.other.attribute-name.class.mixin.css: #800000" - } - }, - { - "c": "((", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.brace.round.css", - "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": "0", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css", - "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.css.less meta.property-list.css meta.property-list.css", - "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": "0", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css", - "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.css.less meta.property-list.css meta.property-list.css", - "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": "5", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css", - "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": "px", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.brace.round.css", - "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.css.less meta.property-list.css meta.property-list.css punctuation.separator.list.comma.css", - "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.css.less meta.property-list.css meta.property-list.css", - "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": "30", - "t": "source.css.less meta.property-list.css meta.property-list.css constant.numeric.css", - "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.css.less meta.property-list.css meta.property-list.css constant.numeric.css keyword.other.unit.percentage.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.brace.round.css", - "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.css.less meta.property-list.css meta.property-list.css punctuation.terminator.rule.css", - "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", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "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.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "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.css.less meta.selector.css entity.other.attribute-name.id punctuation.definition.entity.css", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": "header", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": " ", - "t": "source.css.less", - "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.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "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", - "t": "source.css.less meta.property-list.css", - "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": "h1", - "t": "source.css.less meta.property-list.css entity.name.tag.css", - "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", - "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", - "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", - "hc_light": "entity.name.tag: #0F4A85", - "light_modern": "entity.name.tag: #800000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "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\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "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": "font-size", - "t": "source.css.less meta.property-list.css meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css meta.property-list.css", - "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": "26", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css", - "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": "px", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.terminator.rule.css", - "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\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "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": "font-weight", - "t": "source.css.less meta.property-list.css meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css meta.property-list.css", - "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": "bold", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-value.css support.constant.property-value.css", - "r": { - "dark_plus": "support.constant.property-value: #CE9178", - "light_plus": "support.constant.property-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "support.constant.property-value: #0451A5", - "hc_black": "support.constant.property-value: #CE9178", - "dark_modern": "support.constant.property-value: #CE9178", - "hc_light": "support.constant.property-value: #0451A5", - "light_modern": "support.constant.property-value: #0451A5" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.terminator.rule.css", - "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", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "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", - "t": "source.css.less meta.property-list.css", - "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": "p", - "t": "source.css.less meta.property-list.css entity.name.tag.css", - "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", - "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", - "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", - "hc_light": "entity.name.tag: #0F4A85", - "light_modern": "entity.name.tag: #800000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "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.css.less meta.property-list.css meta.property-list.css", - "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": "font-size", - "t": "source.css.less meta.property-list.css meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css meta.property-list.css", - "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": "12", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css", - "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": "px", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css meta.property-list.css punctuation.terminator.rule.css", - "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\t", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css entity.name.tag.css", - "r": { - "dark_plus": "entity.name.tag.css: #D7BA7D", - "light_plus": "entity.name.tag: #800000", - "dark_vs": "entity.name.tag.css: #D7BA7D", - "light_vs": "entity.name.tag: #800000", - "hc_black": "entity.name.tag.css: #D7BA7D", - "dark_modern": "entity.name.tag.css: #D7BA7D", - "hc_light": "entity.name.tag: #0F4A85", - "light_modern": "entity.name.tag: #800000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "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.css.less meta.property-list.css meta.property-list.css meta.property-list.css", - "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": "text-decoration", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css meta.property-list.css meta.property-list.css", - "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": "none", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-value.css support.constant.property-value.css", - "r": { - "dark_plus": "support.constant.property-value: #CE9178", - "light_plus": "support.constant.property-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "support.constant.property-value: #0451A5", - "hc_black": "support.constant.property-value: #CE9178", - "dark_modern": "support.constant.property-value: #CE9178", - "hc_light": "support.constant.property-value: #0451A5", - "light_modern": "support.constant.property-value: #0451A5" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css punctuation.terminator.rule.css", - "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\t\t", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css meta.property-list.css entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css", - "r": { - "dark_plus": "entity.other.attribute-name.parent-selector.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.parent-selector.css: #800000", - "dark_vs": "entity.other.attribute-name.parent-selector.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.parent-selector.css: #800000", - "hc_black": "entity.other.attribute-name.parent-selector.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.parent-selector.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.parent-selector.css: #0F4A85", - "light_modern": "entity.other.attribute-name.parent-selector.css: #800000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", - "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" - } - }, - { - "c": "hover", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css entity.other.attribute-name.pseudo-class.css", - "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "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.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css", - "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": "border-width", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css", - "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": "px", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css meta.property-list.css meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "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\t", - "t": "source.css.less meta.property-list.css meta.property-list.css meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "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", - "t": "source.css.less meta.property-list.css meta.property-list.css", - "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.css.less meta.property-list.css meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "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.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "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.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "the-border", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", - "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.css.less", - "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.css.less constant.numeric.css", - "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": "px", - "t": "source.css.less constant.numeric.css keyword.other.unit.px.css", - "r": { - "dark_plus": "keyword.other.unit: #B5CEA8", - "light_plus": "keyword.other.unit: #098658", - "dark_vs": "keyword.other.unit: #B5CEA8", - "light_vs": "keyword.other.unit: #098658", - "hc_black": "keyword.other.unit: #B5CEA8", - "dark_modern": "keyword.other.unit: #B5CEA8", - "hc_light": "keyword.other.unit: #096D48", - "light_modern": "keyword.other.unit: #098658" - } - }, - { - "c": ";", - "t": "source.css.less punctuation.terminator.rule.css", - "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.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "base-color", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", - "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.css.less", - "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": "#111", - "t": "source.css.less constant.other.rgb-value.css", - "r": { - "dark_plus": "constant.other.rgb-value: #CE9178", - "light_plus": "constant.other.rgb-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "constant.other.rgb-value: #0451A5", - "hc_black": "constant.other.rgb-value: #CE9178", - "dark_modern": "constant.other.rgb-value: #CE9178", - "hc_light": "constant.other.rgb-value: #0451A5", - "light_modern": "constant.other.rgb-value: #0451A5" - } - }, - { - "c": ";", - "t": "source.css.less punctuation.terminator.rule.css", - "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.css.less variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "red", - "t": "source.css.less variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less punctuation.separator.key-value.css", - "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.css.less", - "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": "#842210", - "t": "source.css.less constant.other.rgb-value.css", - "r": { - "dark_plus": "constant.other.rgb-value: #CE9178", - "light_plus": "constant.other.rgb-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "constant.other.rgb-value: #0451A5", - "hc_black": "constant.other.rgb-value: #CE9178", - "dark_modern": "constant.other.rgb-value: #CE9178", - "hc_light": "constant.other.rgb-value: #0451A5", - "light_modern": "constant.other.rgb-value: #0451A5" - } - }, - { - "c": ";", - "t": "source.css.less punctuation.terminator.rule.css", - "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.css.less meta.selector.css entity.other.attribute-name.id punctuation.definition.entity.css", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": "header", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": " ", - "t": "source.css.less", - "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.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "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", - "t": "source.css.less meta.property-list.css", - "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": "color", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css", - "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.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "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.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "base-color", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "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.css.less meta.property-list.css meta.property-value.css keyword.operator.less", - "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4", - "dark_modern": "keyword.operator: #D4D4D4", - "hc_light": "keyword.operator: #000000", - "light_modern": "keyword.operator: #000000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "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": "3", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", - "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.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "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.css.less meta.property-list.css punctuation.terminator.rule.css", - "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", - "t": "source.css.less meta.property-list.css", - "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": "border-left", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css", - "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.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "the-border", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", - "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", - "t": "source.css.less meta.property-list.css", - "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": "border-right", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css", - "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.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "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.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "the-border", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "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.css.less meta.property-list.css meta.property-value.css keyword.operator.less", - "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4", - "dark_modern": "keyword.operator: #D4D4D4", - "hc_light": "keyword.operator: #000000", - "light_modern": "keyword.operator: #000000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "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": "2", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", - "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.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "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.css.less meta.property-list.css punctuation.terminator.rule.css", - "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.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", - "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.css.less meta.selector.css entity.other.attribute-name.id punctuation.definition.entity.css", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": "footer", - "t": "source.css.less meta.selector.css entity.other.attribute-name.id", - "r": { - "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_plus": "source.css.less entity.other.attribute-name.id: #800000", - "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "light_vs": "source.css.less entity.other.attribute-name.id: #800000", - "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", - "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", - "light_modern": "source.css.less entity.other.attribute-name.id: #800000" - } - }, - { - "c": " ", - "t": "source.css.less", - "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.css.less meta.property-list.css punctuation.section.property-list.begin.bracket.curly.css", - "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", - "t": "source.css.less meta.property-list.css", - "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": "color", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css", - "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.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "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.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": "base-color", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", - "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "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.css.less meta.property-list.css meta.property-value.css keyword.operator.less", - "r": { - "dark_plus": "keyword.operator: #D4D4D4", - "light_plus": "keyword.operator: #000000", - "dark_vs": "keyword.operator: #D4D4D4", - "light_vs": "keyword.operator: #000000", - "hc_black": "keyword.operator: #D4D4D4", - "dark_modern": "keyword.operator: #D4D4D4", - "hc_light": "keyword.operator: #000000", - "light_modern": "keyword.operator: #000000" - } - }, - { - "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", - "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": "#003300", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.other.rgb-value.css", - "r": { - "dark_plus": "constant.other.rgb-value: #CE9178", - "light_plus": "constant.other.rgb-value: #0451A5", - "dark_vs": "default: #D4D4D4", - "light_vs": "constant.other.rgb-value: #0451A5", - "hc_black": "constant.other.rgb-value: #CE9178", - "dark_modern": "constant.other.rgb-value: #CE9178", - "hc_light": "constant.other.rgb-value: #0451A5", - "light_modern": "constant.other.rgb-value: #0451A5" - } - }, - { - "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", - "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.css.less meta.property-list.css punctuation.terminator.rule.css", - "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", - "t": "source.css.less meta.property-list.css", - "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": "border-color", - "t": "source.css.less meta.property-list.css support.type.property-name.css", - "r": { - "dark_plus": "support.type.property-name: #9CDCFE", - "light_plus": "support.type.property-name: #E50000", - "dark_vs": "support.type.property-name: #9CDCFE", - "light_vs": "support.type.property-name: #E50000", - "hc_black": "support.type.property-name: #D4D4D4", - "dark_modern": "support.type.property-name: #9CDCFE", - "hc_light": "support.type.property-name: #264F78", - "light_modern": "support.type.property-name: #E50000" - } - }, - { - "c": ":", - "t": "source.css.less meta.property-list.css punctuation.separator.key-value.css", - "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.css.less meta.property-list.css", - "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": "desaturate", - "t": "source.css.less meta.property-list.css meta.property-value.css support.function.any-method.builtin.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less support.function.color-operation.less", "r": { "dark_plus": "support.function: #DCDCAA", "light_plus": "support.function: #795E26", @@ -4327,7 +2045,7 @@ }, { "c": "(", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.begin.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -4341,35 +2059,35 @@ }, { "c": "@", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less punctuation.definition.variable.less", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { - "c": "red", - "t": "source.css.less meta.property-list.css meta.property-value.css variable.other.less", + "c": "base", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", "r": { - "dark_plus": "variable.other.less: #9CDCFE", - "light_plus": "variable.other.less: #E50000", - "dark_vs": "variable.other.less: #9CDCFE", - "light_vs": "variable.other.less: #E50000", - "hc_black": "variable.other.less: #D4D4D4", - "dark_modern": "variable.other.less: #9CDCFE", - "hc_light": "variable.other.less: #264F78", - "light_modern": "variable.other.less: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ",", - "t": "source.css.less meta.property-list.css meta.property-value.css punctuation.separator.list.comma.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.separator.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -4383,7 +2101,7 @@ }, { "c": " ", - "t": "source.css.less meta.property-list.css meta.property-value.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -4396,8 +2114,8 @@ } }, { - "c": "10", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css", + "c": "30", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less", "r": { "dark_plus": "constant.numeric: #B5CEA8", "light_plus": "constant.numeric: #098658", @@ -4411,7 +2129,7 @@ }, { "c": "%", - "t": "source.css.less meta.property-list.css meta.property-value.css constant.numeric.css keyword.other.unit.percentage.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less keyword.other.unit.less", "r": { "dark_plus": "keyword.other.unit: #B5CEA8", "light_plus": "keyword.other.unit: #098658", @@ -4425,7 +2143,7 @@ }, { "c": ")", - "t": "source.css.less meta.property-list.css meta.property-value.css meta.brace.round.css", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -4439,7 +2157,329 @@ }, { "c": ";", - "t": "source.css.less meta.property-list.css punctuation.terminator.rule.css", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "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", + "t": "source.css.less meta.property-list.less", + "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": "div", + "t": "source.css.less meta.property-list.less meta.selector.less entity.name.tag.less", + "r": { + "dark_plus": "entity.name.tag.less: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.less: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.less: #D7BA7D", + "dark_modern": "entity.name.tag.less: #D7BA7D", + "hc_light": "entity.name.tag: #0F4A85", + "light_modern": "entity.name.tag: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.selector.less", + "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.css.less meta.property-list.less meta.property-list.less punctuation.definition.block.begin.less", + "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\t", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "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.css.less meta.property-list.less meta.property-list.less meta.selector.less entity.other.attribute-name.class.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "box-shadow", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less entity.other.attribute-name.class.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.class: #800000", + "dark_vs": "source.css entity.other.attribute-name.class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.class: #800000", + "hc_black": "source.css entity.other.attribute-name.class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.class: #800000" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less punctuation.definition.group.begin.less", + "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.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less punctuation.definition.group.begin.less", + "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": "0", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less constant.numeric.less", + "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.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less", + "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": "0", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less constant.numeric.less", + "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.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less", + "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": "5", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less constant.numeric.less", + "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": "px", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less meta.group.less punctuation.definition.group.end.less", + "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.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less punctuation.separator.less", + "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.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less", + "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": "30", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less constant.numeric.less", + "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.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less meta.group.less punctuation.definition.group.end.less", + "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.css.less meta.property-list.less meta.property-list.less punctuation.terminator.rule.less", + "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", + "t": "source.css.less meta.property-list.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", @@ -4453,7 +2493,2177 @@ }, { "c": "}", - "t": "source.css.less meta.property-list.css punctuation.section.property-list.end.bracket.curly.css", + "t": "source.css.less meta.property-list.less punctuation.definition.block.end.less", + "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.css.less punctuation.definition.block.end.less", + "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.css.less meta.selector.less entity.other.attribute-name.id.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": "header", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less", + "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.css.less meta.property-list.less punctuation.definition.block.begin.less", + "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", + "t": "source.css.less meta.property-list.less", + "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": "h1", + "t": "source.css.less meta.property-list.less meta.selector.less entity.name.tag.less", + "r": { + "dark_plus": "entity.name.tag.less: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.less: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.less: #D7BA7D", + "dark_modern": "entity.name.tag.less: #D7BA7D", + "hc_light": "entity.name.tag: #0F4A85", + "light_modern": "entity.name.tag: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.selector.less", + "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.css.less meta.property-list.less meta.property-list.less punctuation.definition.block.begin.less", + "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\t", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "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": "font-size", + "t": "source.css.less meta.property-list.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-value.less", + "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": "26", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less", + "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": "px", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.terminator.rule.less", + "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\t", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "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": "font-weight", + "t": "source.css.less meta.property-list.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-value.less", + "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": "bold", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less support.constant.property-value.less", + "r": { + "dark_plus": "support.constant.property-value: #CE9178", + "light_plus": "support.constant.property-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "support.constant.property-value: #0451A5", + "hc_black": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", + "hc_light": "support.constant.property-value: #0451A5", + "light_modern": "support.constant.property-value: #0451A5" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.terminator.rule.less", + "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", + "t": "source.css.less meta.property-list.less", + "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.css.less meta.property-list.less punctuation.definition.block.end.less", + "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", + "t": "source.css.less meta.property-list.less", + "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": "p", + "t": "source.css.less meta.property-list.less meta.selector.less entity.name.tag.less", + "r": { + "dark_plus": "entity.name.tag.less: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.less: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.less: #D7BA7D", + "dark_modern": "entity.name.tag.less: #D7BA7D", + "hc_light": "entity.name.tag: #0F4A85", + "light_modern": "entity.name.tag: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.selector.less", + "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.css.less meta.property-list.less meta.property-list.less punctuation.definition.block.begin.less", + "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.css.less meta.property-list.less meta.property-list.less", + "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": "font-size", + "t": "source.css.less meta.property-list.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-value.less", + "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": "12", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less", + "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": "px", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less meta.property-list.less punctuation.terminator.rule.less", + "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\t", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "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.css.less meta.property-list.less meta.property-list.less meta.selector.less entity.name.tag.less", + "r": { + "dark_plus": "entity.name.tag.less: #D7BA7D", + "light_plus": "entity.name.tag: #800000", + "dark_vs": "entity.name.tag.less: #D7BA7D", + "light_vs": "entity.name.tag: #800000", + "hc_black": "entity.name.tag.less: #D7BA7D", + "dark_modern": "entity.name.tag.less: #D7BA7D", + "hc_light": "entity.name.tag: #0F4A85", + "light_modern": "entity.name.tag: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.selector.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.definition.block.begin.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-list.less", + "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": "text-decoration", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less", + "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": "none", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less support.constant.property-value.less", + "r": { + "dark_plus": "support.constant.property-value: #CE9178", + "light_plus": "support.constant.property-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "support.constant.property-value: #0451A5", + "hc_black": "support.constant.property-value: #CE9178", + "dark_modern": "support.constant.property-value: #CE9178", + "hc_light": "support.constant.property-value: #0451A5", + "light_modern": "support.constant.property-value: #0451A5" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.terminator.rule.less", + "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\t\t", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.selector.less entity.other.attribute-name.parent.less punctuation.definition.entity.less", + "r": { + "dark_plus": "entity.other.attribute-name.parent.less: #D7BA7D", + "light_plus": "entity.other.attribute-name.parent.less: #800000", + "dark_vs": "entity.other.attribute-name.parent.less: #D7BA7D", + "light_vs": "entity.other.attribute-name.parent.less: #800000", + "hc_black": "entity.other.attribute-name.parent.less: #D7BA7D", + "dark_modern": "entity.other.attribute-name.parent.less: #D7BA7D", + "hc_light": "entity.other.attribute-name.parent.less: #0F4A85", + "light_modern": "entity.other.attribute-name.parent.less: #800000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.selector.less meta.function-call.less punctuation.definition.entity.less", + "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": "hover", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.selector.less meta.function-call.less entity.other.attribute-name.pseudo-class.less", + "r": { + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.selector.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.definition.block.begin.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less", + "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": "border-width", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less", + "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": "px", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-list.less meta.property-value.less", + "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.css.less meta.property-list.less meta.property-list.less meta.property-list.less punctuation.definition.block.end.less", + "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\t", + "t": "source.css.less meta.property-list.less meta.property-list.less", + "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.css.less meta.property-list.less meta.property-list.less punctuation.definition.block.end.less", + "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", + "t": "source.css.less meta.property-list.less", + "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.css.less meta.property-list.less punctuation.definition.block.end.less", + "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.css.less punctuation.definition.block.end.less", + "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.css.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "the-border", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-value.less punctuation.separator.key-value.less", + "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.css.less meta.property-value.less meta.property-value.less", + "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.css.less meta.property-value.less constant.numeric.less", + "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": "px", + "t": "source.css.less meta.property-value.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-value.less punctuation.terminator.rule.less", + "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.css.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "base-color", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-value.less punctuation.separator.key-value.less", + "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.css.less meta.property-value.less meta.property-value.less", + "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.css.less meta.property-value.less constant.other.color.rgb-value.less punctuation.definition.constant.less", + "r": { + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" + } + }, + { + "c": "111", + "t": "source.css.less meta.property-value.less constant.other.color.rgb-value.less", + "r": { + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-value.less punctuation.terminator.rule.less", + "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.css.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "red", + "t": "source.css.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-value.less punctuation.separator.key-value.less", + "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.css.less meta.property-value.less meta.property-value.less", + "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.css.less meta.property-value.less constant.other.color.rgb-value.less punctuation.definition.constant.less", + "r": { + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" + } + }, + { + "c": "842210", + "t": "source.css.less meta.property-value.less constant.other.color.rgb-value.less", + "r": { + "dark_plus": "constant.other.color.rgb-value: #CE9178", + "light_plus": "constant.other.color.rgb-value: #0451A5", + "dark_vs": "default: #D4D4D4", + "light_vs": "constant.other.color.rgb-value: #0451A5", + "hc_black": "constant.other.color.rgb-value: #CE9178", + "dark_modern": "constant.other.color.rgb-value: #CE9178", + "hc_light": "constant.other.color.rgb-value: #0451A5", + "light_modern": "constant.other.color.rgb-value: #0451A5" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-value.less punctuation.terminator.rule.less", + "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.css.less meta.selector.less entity.other.attribute-name.id.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": "header", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less", + "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.css.less meta.property-list.less punctuation.definition.block.begin.less", + "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", + "t": "source.css.less meta.property-list.less", + "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": "color", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-value.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.begin.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "base-color", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less keyword.operator.arithmetic.less", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "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": "3", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less constant.numeric.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.end.less", + "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.css.less meta.property-list.less punctuation.terminator.rule.less", + "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", + "t": "source.css.less meta.property-list.less", + "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": "border-left", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-value.less", + "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.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "the-border", + "t": "source.css.less meta.property-list.less meta.property-value.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ";", + "t": "source.css.less meta.property-list.less punctuation.terminator.rule.less", + "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", + "t": "source.css.less meta.property-list.less", + "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": "border-right", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-value.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.begin.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "the-border", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less keyword.operator.arithmetic.less", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "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": "2", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less constant.numeric.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.end.less", + "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.css.less meta.property-list.less punctuation.terminator.rule.less", + "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.css.less punctuation.definition.block.end.less", + "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.css.less meta.selector.less entity.other.attribute-name.id.less punctuation.definition.entity.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": "footer", + "t": "source.css.less meta.selector.less entity.other.attribute-name.id.less", + "r": { + "dark_plus": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_plus": "source.css.less entity.other.attribute-name.id: #800000", + "dark_vs": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "light_vs": "source.css.less entity.other.attribute-name.id: #800000", + "hc_black": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "dark_modern": "source.css.less entity.other.attribute-name.id: #D7BA7D", + "hc_light": "source.css.less entity.other.attribute-name.id: #0F4A85", + "light_modern": "source.css.less entity.other.attribute-name.id: #800000" + } + }, + { + "c": " ", + "t": "source.css.less meta.selector.less", + "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.css.less meta.property-list.less punctuation.definition.block.begin.less", + "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", + "t": "source.css.less meta.property-list.less", + "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": "color", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-value.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.begin.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "base-color", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": " ", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less keyword.operator.arithmetic.less", + "r": { + "dark_plus": "keyword.operator: #D4D4D4", + "light_plus": "keyword.operator: #000000", + "dark_vs": "keyword.operator: #D4D4D4", + "light_vs": "keyword.operator: #000000", + "hc_black": "keyword.operator: #D4D4D4", + "dark_modern": "keyword.operator: #D4D4D4", + "hc_light": "keyword.operator: #000000", + "light_modern": "keyword.operator: #000000" + } + }, + { + "c": " #", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less", + "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": "003300", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.group.less constant.numeric.less", + "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.css.less meta.property-list.less meta.property-value.less meta.group.less punctuation.definition.group.end.less", + "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.css.less meta.property-list.less punctuation.terminator.rule.less", + "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", + "t": "source.css.less meta.property-list.less", + "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": "border-color", + "t": "source.css.less meta.property-list.less support.type.property-name.less", + "r": { + "dark_plus": "support.type.property-name: #9CDCFE", + "light_plus": "support.type.property-name: #E50000", + "dark_vs": "support.type.property-name: #9CDCFE", + "light_vs": "support.type.property-name: #E50000", + "hc_black": "support.type.property-name: #D4D4D4", + "dark_modern": "support.type.property-name: #9CDCFE", + "hc_light": "support.type.property-name: #264F78", + "light_modern": "support.type.property-name: #E50000" + } + }, + { + "c": ":", + "t": "source.css.less meta.property-list.less punctuation.separator.key-value.less", + "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.css.less meta.property-list.less meta.property-value.less", + "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": "desaturate", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less support.function.color-operation.less", + "r": { + "dark_plus": "support.function: #DCDCAA", + "light_plus": "support.function: #795E26", + "dark_vs": "default: #D4D4D4", + "light_vs": "default: #000000", + "hc_black": "support.function: #DCDCAA", + "dark_modern": "support.function: #DCDCAA", + "hc_light": "support.function: #5E2CBC", + "light_modern": "support.function: #795E26" + } + }, + { + "c": "(", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.begin.less", + "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.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less punctuation.definition.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": "red", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less variable.other.readwrite.less support.other.variable.less", + "r": { + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" + } + }, + { + "c": ",", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.separator.less", + "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.css.less meta.property-list.less meta.property-value.less meta.function-call.less", + "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": "10", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less", + "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.css.less meta.property-list.less meta.property-value.less meta.function-call.less constant.numeric.less keyword.other.unit.less", + "r": { + "dark_plus": "keyword.other.unit: #B5CEA8", + "light_plus": "keyword.other.unit: #098658", + "dark_vs": "keyword.other.unit: #B5CEA8", + "light_vs": "keyword.other.unit: #098658", + "hc_black": "keyword.other.unit: #B5CEA8", + "dark_modern": "keyword.other.unit: #B5CEA8", + "hc_light": "keyword.other.unit: #096D48", + "light_modern": "keyword.other.unit: #098658" + } + }, + { + "c": ")", + "t": "source.css.less meta.property-list.less meta.property-value.less meta.function-call.less punctuation.definition.group.end.less", + "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.css.less meta.property-list.less punctuation.terminator.rule.less", + "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.css.less punctuation.definition.block.end.less", "r": { "dark_plus": "default: #D4D4D4", "light_plus": "default: #000000", diff --git a/extensions/vscode-colorize-tests/test/colorize-results/test_scss.json b/extensions/vscode-colorize-tests/test/colorize-results/test_scss.json index 843cf288784..933ebf2ba5c 100644 --- a/extensions/vscode-colorize-tests/test/colorize-results/test_scss.json +++ b/extensions/vscode-colorize-tests/test/colorize-results/test_scss.json @@ -1333,28 +1333,28 @@ "c": ":", "t": "source.css.scss meta.property-list.scss meta.property-list.scss entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { "c": "hover", "t": "source.css.scss meta.property-list.scss meta.property-list.scss entity.other.attribute-name.pseudo-class.css", "r": { - "dark_plus": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_plus": "entity.other.attribute-name.pseudo-class.css: #800000", - "dark_vs": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.pseudo-class.css: #800000", - "hc_black": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "dark_modern": "entity.other.attribute-name.pseudo-class.css: #D7BA7D", - "hc_light": "entity.other.attribute-name.pseudo-class.css: #0F4A85", - "light_modern": "entity.other.attribute-name.pseudo-class.css: #800000" + "dark_plus": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_plus": "source.css entity.other.attribute-name.pseudo-class: #800000", + "dark_vs": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "light_vs": "source.css entity.other.attribute-name.pseudo-class: #800000", + "hc_black": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "dark_modern": "source.css entity.other.attribute-name.pseudo-class: #D7BA7D", + "hc_light": "source.css entity.other.attribute-name.pseudo-class: #0F4A85", + "light_modern": "source.css entity.other.attribute-name.pseudo-class: #800000" } }, { @@ -3615,14 +3615,14 @@ "c": "$width", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -3699,14 +3699,14 @@ "c": "$width", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -3895,14 +3895,14 @@ "c": "$localvar", "t": "source.css.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4035,14 +4035,14 @@ "c": "$width", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4077,14 +4077,14 @@ "c": "$font-size", "t": "source.css.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4175,14 +4175,14 @@ "c": "$line-height", "t": "source.css.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4315,42 +4315,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$font-size", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4371,42 +4371,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$line-height", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4441,14 +4441,14 @@ "c": "$name", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4497,14 +4497,14 @@ "c": "$attr", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4595,42 +4595,42 @@ "c": "#{", "t": "source.css.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$name", "t": "source.css.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4679,42 +4679,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$attr", "t": "source.css.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -4875,14 +4875,14 @@ "c": "$grid-background-column-color", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6093,14 +6093,14 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss meta.property-value.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6121,14 +6121,14 @@ "c": " ", "t": "source.css.scss meta.property-list.scss meta.property-value.scss string.quoted.double.scss variable.interpolation.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6149,14 +6149,14 @@ "c": " ", "t": "source.css.scss meta.property-list.scss meta.property-value.scss string.quoted.double.scss variable.interpolation.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6177,14 +6177,14 @@ "c": "}", "t": "source.css.scss meta.property-list.scss meta.property-value.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6555,28 +6555,28 @@ "c": "$hue", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ":", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.parameter.url.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6639,28 +6639,28 @@ "c": "$saturation", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ":", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.parameter.url.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6737,28 +6737,28 @@ "c": "$lightness", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": ":", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.parameter.url.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6891,14 +6891,14 @@ "c": "$grid-width", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -6975,14 +6975,14 @@ "c": "$gutter-width", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7129,14 +7129,14 @@ "c": "$n", "t": "source.css.scss meta.at-rule.function.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7241,14 +7241,14 @@ "c": "$n", "t": "source.css.scss meta.property-list.scss meta.at-rule.return.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7297,14 +7297,14 @@ "c": "$grid-width", "t": "source.css.scss meta.property-list.scss meta.at-rule.return.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7367,14 +7367,14 @@ "c": "$n", "t": "source.css.scss meta.property-list.scss meta.at-rule.return.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7493,14 +7493,14 @@ "c": "$gutter-width", "t": "source.css.scss meta.property-list.scss meta.at-rule.return.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -7885,14 +7885,14 @@ "c": "$family", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -8179,42 +8179,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.import.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$family", "t": "source.css.scss meta.at-rule.import.scss string.quoted.double.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.import.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10363,14 +10363,14 @@ "c": "$x", "t": "source.css.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10391,14 +10391,14 @@ "c": "$y", "t": "source.css.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10531,14 +10531,14 @@ "c": "$x", "t": "source.css.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10671,42 +10671,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$x", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10769,14 +10769,14 @@ "c": "$x", "t": "source.css.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -10881,14 +10881,14 @@ "c": "$x", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11021,14 +11021,14 @@ "c": "$y", "t": "source.css.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11161,42 +11161,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$y", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.at-rule.warn.scss string.quoted.double.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11259,14 +11259,14 @@ "c": "$y", "t": "source.css.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11371,14 +11371,14 @@ "c": "$y", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11567,14 +11567,14 @@ "c": "$x", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -11651,14 +11651,14 @@ "c": "$y", "t": "source.css.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -12771,14 +12771,14 @@ "c": "$type", "t": "source.css.scss meta.definition.variable.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -12925,14 +12925,14 @@ "c": "$type", "t": "source.css.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -13373,14 +13373,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.for.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -13569,42 +13569,42 @@ "c": "#{", "t": "source.css.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$i", "t": "source.css.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -13765,14 +13765,14 @@ "c": "$i", "t": "source.css.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -13919,14 +13919,14 @@ "c": "$animal", "t": "source.css.scss meta.at-rule.each.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14045,42 +14045,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$animal", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14241,42 +14241,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss string.quoted.single.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$animal", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss string.quoted.single.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss string.quoted.single.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "string: #CE9178", - "light_vs": "string: #A31515", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14423,14 +14423,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14521,14 +14521,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14661,42 +14661,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14857,14 +14857,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14927,14 +14927,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -14969,14 +14969,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15179,14 +15179,14 @@ "c": "$total", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.function.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15221,14 +15221,14 @@ "c": "$a", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.function.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15333,14 +15333,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.at-rule.for.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15445,14 +15445,14 @@ "c": "$total", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.at-rule.for.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15585,14 +15585,14 @@ "c": "$a", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15739,14 +15739,14 @@ "c": "$i", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15781,14 +15781,14 @@ "c": "$total", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -15907,14 +15907,14 @@ "c": "$z", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -16215,14 +16215,14 @@ "c": "$grid", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.at-rule.return.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -17209,14 +17209,14 @@ "c": "$color", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -17237,14 +17237,14 @@ "c": "$width", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -17461,14 +17461,14 @@ "c": "$color", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -17545,14 +17545,14 @@ "c": "$width", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18007,14 +18007,14 @@ "c": "$shadows", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18133,14 +18133,14 @@ "c": "$shadows", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18217,14 +18217,14 @@ "c": "$shadows", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18301,14 +18301,14 @@ "c": "$shadows", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18959,14 +18959,14 @@ "c": "$text", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -18987,14 +18987,14 @@ "c": "$background", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19015,14 +19015,14 @@ "c": "$border", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19127,14 +19127,14 @@ "c": "$text", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19211,14 +19211,14 @@ "c": "$background", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19295,14 +19295,14 @@ "c": "$border", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-value.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19337,14 +19337,14 @@ "c": "$values", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -19631,14 +19631,14 @@ "c": "$values", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.at-rule.include.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -20247,14 +20247,14 @@ "c": "logo.gif", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.property-value.scss variable.parameter.url.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -20373,14 +20373,14 @@ "c": "$attr", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.at-rule.if.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -21423,14 +21423,14 @@ "c": "$foo", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -22543,14 +22543,14 @@ "c": "$a", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.at-rule.mixin.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -22697,42 +22697,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$a", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -22809,42 +22809,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$a", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss meta.at-rule.extend.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -23831,42 +23831,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss entity.other.attribute-name.class.css variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "entity.other.attribute-name.class.css: #D7BA7D", - "light_vs": "entity.other.attribute-name.class.css: #800000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -23929,42 +23929,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -24069,42 +24069,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -24181,42 +24181,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -24237,42 +24237,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -24363,42 +24363,42 @@ "c": "#{", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.begin.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "$d", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { "c": "}", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss meta.property-list.scss variable.interpolation.scss punctuation.definition.interpolation.end.bracket.curly.scss", "r": { - "dark_plus": "variable: #9CDCFE", - "light_plus": "variable: #001080", - "dark_vs": "default: #D4D4D4", - "light_vs": "default: #000000", - "hc_black": "variable: #9CDCFE", - "dark_modern": "variable: #9CDCFE", - "hc_light": "variable: #001080", - "light_modern": "variable: #001080" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -26505,14 +26505,14 @@ "c": "$var1", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { @@ -26603,14 +26603,14 @@ "c": "$var2", "t": "source.css.scss meta.at-rule.each.scss meta.at-rule.while.scss meta.property-list.scss variable.scss", "r": { - "dark_plus": "variable.scss: #9CDCFE", - "light_plus": "variable.scss: #E50000", - "dark_vs": "variable.scss: #9CDCFE", - "light_vs": "variable.scss: #E50000", - "hc_black": "variable.scss: #D4D4D4", - "dark_modern": "variable.scss: #9CDCFE", - "hc_light": "variable.scss: #264F78", - "light_modern": "variable.scss: #E50000" + "dark_plus": "source.css variable: #9CDCFE", + "light_plus": "source.css variable: #E50000", + "dark_vs": "source.css variable: #9CDCFE", + "light_vs": "source.css variable: #E50000", + "hc_black": "source.css variable: #D4D4D4", + "dark_modern": "source.css variable: #9CDCFE", + "hc_light": "source.css variable: #264F78", + "light_modern": "source.css variable: #E50000" } }, { diff --git a/package.json b/package.json index 61e5ce43962..2772df69313 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.85.0", - "distro": "69e0a36f6df8a1e9fca2a92920a6a4c1ba9e57e4", + "distro": "166cef1a46189f0a5c1952c9e11bf0c387bae990", "author": { "name": "Microsoft Corporation" }, @@ -150,7 +150,7 @@ "cssnano": "^4.1.11", "debounce": "^1.0.0", "deemon": "^1.8.0", - "electron": "25.9.6", + "electron": "25.9.7", "eslint": "8.36.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-jsdoc": "^46.5.0", diff --git a/src/bootstrap-fork.js b/src/bootstrap-fork.js index 036522f23ce..9de1e6f0d15 100644 --- a/src/bootstrap-fork.js +++ b/src/bootstrap-fork.js @@ -56,6 +56,9 @@ function pipeLoggingToParent() { * @param {ArrayLike} args */ function safeToArray(args) { + /** + * @type {string[]} + */ const seen = []; const argsArray = []; @@ -178,7 +181,7 @@ function pipeLoggingToParent() { Object.defineProperty(stream, 'write', { set: () => { }, - get: () => (chunk, encoding, callback) => { + get: () => (/** @type {string | Buffer | Uint8Array} */ chunk, /** @type {BufferEncoding | undefined} */ encoding, /** @type {((err?: Error | undefined) => void) | undefined} */ callback) => { buf += chunk.toString(encoding); const eol = buf.length > MAX_STREAM_BUFFER_LENGTH ? buf.length : buf.lastIndexOf('\n'); if (eol !== -1) { @@ -239,7 +242,9 @@ function configureCrashReporter() { const crashReporterProcessType = process.env['VSCODE_CRASH_REPORTER_PROCESS_TYPE']; if (crashReporterProcessType) { try { + // @ts-ignore if (process['crashReporter'] && typeof process['crashReporter'].addExtraParameter === 'function' /* Electron only */) { + // @ts-ignore process['crashReporter'].addExtraParameter('processType', crashReporterProcessType); } } catch (error) { diff --git a/src/bootstrap-window.js b/src/bootstrap-window.js index 6334d62afc5..85409cc5a21 100644 --- a/src/bootstrap-window.js +++ b/src/bootstrap-window.js @@ -20,6 +20,7 @@ // Browser else { + // @ts-ignore globalThis.MonacoBootstrapWindow = factory(); } }(this, function () { @@ -71,12 +72,16 @@ }; const isDev = !!safeProcess.env['VSCODE_DEV']; const enableDeveloperKeybindings = isDev || forceEnableDeveloperKeybindings; + /** + * @type {() => void | undefined} + */ let developerDeveloperKeybindingsDisposable; if (enableDeveloperKeybindings) { developerDeveloperKeybindingsDisposable = registerDeveloperKeybindings(disallowReloadKeybinding); } // Get the nls configuration into the process.env as early as possible + // @ts-ignore const nlsConfig = globalThis.MonacoBootstrap.setupNLS(); let locale = nlsConfig.availableLanguages['*'] || 'en'; @@ -90,6 +95,10 @@ window['MonacoEnvironment'] = {}; + /** + * @typedef {any} LoaderConfig + */ + /** @type {LoaderConfig} */ const loaderConfig = { baseUrl: `${bootstrapLib.fileUriFromPath(configuration.appRoot, { isWindows: safeProcess.platform === 'win32', scheme: 'vscode-file', fallbackAuthority: 'vscode-app' })}/out`, 'vs/nls': nlsConfig, diff --git a/src/cli.js b/src/cli.js index dd5ea5351ec..a8aaa1f0d54 100644 --- a/src/cli.js +++ b/src/cli.js @@ -19,6 +19,7 @@ const bootstrapNode = require('./bootstrap-node'); const product = require('../product.json'); // Enable portable support +// @ts-ignore bootstrapNode.configurePortable(product); // Enable ASAR support diff --git a/src/main.js b/src/main.js index 7087474bcee..17507dc73da 100644 --- a/src/main.js +++ b/src/main.js @@ -24,6 +24,7 @@ const { getUserDataPath } = require('./vs/platform/environment/node/userDataPath const { stripComments } = require('./vs/base/common/stripComments'); const { getUNCHost, addUNCHostToAllowlist } = require('./vs/base/node/unc'); /** @type {Partial} */ +// @ts-ignore const product = require('../product.json'); const { app, protocol, crashReporter, Menu } = require('electron'); @@ -513,6 +514,7 @@ function registerListeners() { * @type {string[]} */ const macOpenFiles = []; + // @ts-ignore global['macOpenFiles'] = macOpenFiles; app.on('open-file', function (event, path) { macOpenFiles.push(path); @@ -539,6 +541,7 @@ function registerListeners() { app.on('open-url', onOpenUrl); }); + // @ts-ignore global['getOpenUrls'] = function () { app.removeListener('open-url', onOpenUrl); diff --git a/src/tsconfig.json b/src/tsconfig.json index 56ca209276b..1e0c8b14a1a 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -25,7 +25,13 @@ "include": [ "./bootstrap.js", "./bootstrap-amd.js", + "./bootstrap-fork.js", + "./bootstrap-node.js", + "./bootstrap-window.js", + "./cli.js", + "./main.js", "./server-main.js", + "./server-cli.js", "./typings", "./vs/**/*.ts", "vscode-dts/vscode.proposed.*.d.ts", diff --git a/src/tsec.exemptions.json b/src/tsec.exemptions.json index eb8405c96cb..5fef171569e 100644 --- a/src/tsec.exemptions.json +++ b/src/tsec.exemptions.json @@ -14,6 +14,7 @@ "vs/workbench/services/keybinding/test/node/keyboardMapperTestUtils.ts" ], "ban-trustedtypes-createpolicy": [ + "bootstrap-window.js", "vs/amdX.ts", "vs/base/browser/trustedTypes.ts", "vs/base/worker/workerMain.ts", diff --git a/src/vs/base/browser/canIUse.ts b/src/vs/base/browser/canIUse.ts index c126a33b45b..60261a974d0 100644 --- a/src/vs/base/browser/canIUse.ts +++ b/src/vs/base/browser/canIUse.ts @@ -43,5 +43,5 @@ export const BrowserFeatures = { // 'ontouchstart' in window always evaluates to true with typescript's modern typings. This causes `window` to be // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast touch: 'ontouchstart' in mainWindow || navigator.maxTouchPoints > 0, - pointerEvents: mainWindow.PointerEvent && ('ontouchstart' in mainWindow || navigator.maxTouchPoints > 0 || navigator.maxTouchPoints > 0) + pointerEvents: mainWindow.PointerEvent && ('ontouchstart' in mainWindow || navigator.maxTouchPoints > 0) }; diff --git a/src/vs/base/browser/defaultWorkerFactory.ts b/src/vs/base/browser/defaultWorkerFactory.ts index 4f42810f0bd..71391b063f3 100644 --- a/src/vs/base/browser/defaultWorkerFactory.ts +++ b/src/vs/base/browser/defaultWorkerFactory.ts @@ -7,6 +7,7 @@ import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes'; import { onUnexpectedError } from 'vs/base/common/errors'; import { COI } from 'vs/base/common/network'; import { IWorker, IWorkerCallback, IWorkerFactory, logOnceWebWorkerWarning } from 'vs/base/common/worker/simpleWorker'; +import { Disposable, toDisposable } from 'vs/base/common/lifecycle'; const ttPolicy = createTrustedTypesPolicy('defaultWorkerFactory', { createScriptURL: value => value }); @@ -84,13 +85,14 @@ function isPromiseLike(obj: any): obj is PromiseLike { * A worker that uses HTML5 web workers so that is has * its own global scope and its own thread. */ -class WebWorker implements IWorker { +class WebWorker extends Disposable implements IWorker { private readonly id: number; private readonly label: string; private worker: Promise | null; constructor(moduleId: string, id: number, label: string, onMessageCallback: IWorkerCallback, onErrorCallback: (err: any) => void) { + super(); this.id = id; this.label = label; const workerOrPromise = getWorker(label); @@ -109,6 +111,15 @@ class WebWorker implements IWorker { w.addEventListener('error', onErrorCallback); } }); + this._register(toDisposable(() => { + this.worker?.then(w => { + w.onmessage = null; + w.onmessageerror = null; + w.removeEventListener('error', onErrorCallback); + w.terminate(); + }); + this.worker = null; + })); } public getId(): number { @@ -126,10 +137,7 @@ class WebWorker implements IWorker { }); } - public dispose(): void { - this.worker?.then(w => w.terminate()); - this.worker = null; - } + } export class DefaultWorkerFactory implements IWorkerFactory { diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index a24e41988e1..c29ece9d7b5 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -444,9 +444,9 @@ export function getComputedStyle(el: HTMLElement): CSSStyleDeclaration { return getWindow(el).getComputedStyle(el, null); } -export function getClientArea(element: HTMLElement): Dimension { - const elDocument = element.ownerDocument; - const elWindow = elDocument.defaultView?.window; +export function getClientArea(element: HTMLElement, fallback?: HTMLElement): Dimension { + const elWindow = getWindow(element); + const elDocument = elWindow.document; // Try with DOM clientWidth / clientHeight if (element !== elDocument.body) { @@ -473,6 +473,10 @@ export function getClientArea(element: HTMLElement): Dimension { return new Dimension(elDocument.documentElement.clientWidth, elDocument.documentElement.clientHeight); } + if (fallback) { + return getClientArea(fallback); + } + throw new Error('Unable to figure out browser width and height'); } @@ -836,8 +840,9 @@ export function getShadowRoot(domNode: Node): ShadowRoot | null { } /** - * Returns the active element across all child windows. - * Use this instead of `document.activeElement` to handle multiple windows. + * Returns the active element across all child windows + * based on document focus. Falls back to the main + * window if no window has focus. */ export function getActiveElement(): Element | null { let result = getActiveDocument().activeElement; @@ -850,42 +855,49 @@ export function getActiveElement(): Element | null { } /** - * Returns whether the active element of the `document` that owns - * the `element` is `element`. + * Returns true if the focused window active element matches + * the provided element. Falls back to the main window if no + * window has focus. */ export function isActiveElement(element: Element): boolean { - return element.ownerDocument.activeElement === element; + return getActiveElement() === element; } /** - * Returns whether the active element of the `document` that owns - * the `ancestor` is contained in `ancestor`. + * Returns true if the focused window active element is contained in + * `ancestor`. Falls back to the main window if no window has focus. */ export function isAncestorOfActiveElement(ancestor: Element): boolean { - return isAncestor(ancestor.ownerDocument.activeElement, ancestor); + return isAncestor(getActiveElement(), ancestor); } /** - * Returns whether the element is in the active `document`. + * Returns whether the element is in the active `document`. The active + * document has focus or will be the main windows document. */ export function isActiveDocument(element: Element): boolean { return element.ownerDocument === getActiveDocument(); } /** - * Returns the active document across all child windows. - * Use this instead of `document` when reacting to dom - * events to handle multiple windows. + * Returns the active document across main and child windows. + * Prefers the window with focus, otherwise falls back to + * the main windows document. */ export function getActiveDocument(): Document { if (getWindowsCount() <= 1) { - return document; + return mainWindow.document; } const documents = Array.from(getWindows()).map(({ window }) => window.document); - return documents.find(doc => doc.hasFocus()) ?? document; + return documents.find(doc => doc.hasFocus()) ?? mainWindow.document; } +/** + * Returns the active window across main and child windows. + * Prefers the window with focus, otherwise falls back to + * the main window. + */ export function getActiveWindow(): CodeWindow { const document = getActiveDocument(); return (document.defaultView?.window ?? mainWindow) as CodeWindow; @@ -1019,9 +1031,17 @@ export const sharedMutationObserver = new class { }; export function createMetaElement(container: HTMLElement = mainWindow.document.head): HTMLMetaElement { - const meta = document.createElement('meta'); - container.appendChild(meta); - return meta; + return createHeadElement('meta', container) as HTMLMetaElement; +} + +export function createLinkElement(container: HTMLElement = mainWindow.document.head): HTMLLinkElement { + return createHeadElement('link', container) as HTMLLinkElement; +} + +function createHeadElement(tagName: string, container: HTMLElement = mainWindow.document.head): HTMLElement { + const element = document.createElement(tagName); + container.appendChild(element); + return element; } let _sharedStyleSheet: HTMLStyleElement | null = null; diff --git a/src/vs/base/browser/ui/actionbar/actionbar.ts b/src/vs/base/browser/ui/actionbar/actionbar.ts index 562ef1efa5f..1db13db8b63 100644 --- a/src/vs/base/browser/ui/actionbar/actionbar.ts +++ b/src/vs/base/browser/ui/actionbar/actionbar.ts @@ -201,7 +201,7 @@ export class ActionBar extends Disposable implements IActionRunner { } // Recompute focused item - else if (event.equals(KeyCode.Tab) || event.equals(KeyMod.Shift | KeyCode.Tab)) { + else if (event.equals(KeyCode.Tab) || event.equals(KeyMod.Shift | KeyCode.Tab) || event.equals(KeyCode.UpArrow) || event.equals(KeyCode.DownArrow) || event.equals(KeyCode.LeftArrow) || event.equals(KeyCode.RightArrow)) { this.updateFocusedItem(); } })); diff --git a/src/vs/base/browser/ui/iconLabel/iconlabel.css b/src/vs/base/browser/ui/iconLabel/iconlabel.css index c847aecee2f..47f8891703c 100644 --- a/src/vs/base/browser/ui/iconLabel/iconlabel.css +++ b/src/vs/base/browser/ui/iconLabel/iconlabel.css @@ -51,7 +51,7 @@ opacity: 0.5; } -.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-suffix-container>.label-suffix { +.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-suffix-container > .label-suffix { opacity: .7; white-space: pre; } diff --git a/src/vs/base/browser/ui/tree/asyncDataTree.ts b/src/vs/base/browser/ui/tree/asyncDataTree.ts index a6e824612bc..dbd603b052d 100644 --- a/src/vs/base/browser/ui/tree/asyncDataTree.ts +++ b/src/vs/base/browser/ui/tree/asyncDataTree.ts @@ -11,7 +11,7 @@ import { ComposedTreeDelegate, TreeFindMode as TreeFindMode, IAbstractTreeOption import { ICompressedTreeElement, ICompressedTreeNode } from 'vs/base/browser/ui/tree/compressedObjectTreeModel'; import { getVisibleState, isFilterResult } from 'vs/base/browser/ui/tree/indexTreeModel'; import { CompressibleObjectTree, ICompressibleKeyboardNavigationLabelProvider, ICompressibleObjectTreeOptions, ICompressibleTreeRenderer, IObjectTreeOptions, IObjectTreeSetChildrenOptions, ObjectTree } from 'vs/base/browser/ui/tree/objectTree'; -import { IAsyncDataSource, ICollapseStateChangeEvent, IObjectTreeElement, ITreeContextMenuEvent, ITreeDragAndDrop, ITreeEvent, ITreeFilter, ITreeMouseEvent, ITreeNode, ITreeRenderer, ITreeSorter, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from 'vs/base/browser/ui/tree/tree'; +import { IAsyncDataSource, ICollapseStateChangeEvent, IObjectTreeElement, ITreeContextMenuEvent, ITreeDragAndDrop, ITreeEvent, ITreeFilter, ITreeMouseEvent, ITreeNode, ITreeRenderer, ITreeSorter, ObjectTreeElementCollapseState, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from 'vs/base/browser/ui/tree/tree'; import { CancelablePromise, createCancelablePromise, Promises, timeout } from 'vs/base/common/async'; import { Codicon } from 'vs/base/common/codicons'; import { ThemeIcon } from 'vs/base/common/themables'; @@ -31,13 +31,15 @@ interface IAsyncDataTreeNode { hasChildren: boolean; stale: boolean; slow: boolean; - collapsedByDefault: boolean | undefined; + readonly defaultCollapseState: undefined | ObjectTreeElementCollapseState.PreserveOrCollapsed | ObjectTreeElementCollapseState.PreserveOrExpanded; + forceExpanded: boolean; } interface IAsyncDataTreeNodeRequiredProps extends Partial> { readonly element: TInput | T; readonly parent: IAsyncDataTreeNode | null; readonly hasChildren: boolean; + readonly defaultCollapseState: undefined | ObjectTreeElementCollapseState.PreserveOrCollapsed | ObjectTreeElementCollapseState.PreserveOrExpanded; } function createAsyncDataTreeNode(props: IAsyncDataTreeNodeRequiredProps): IAsyncDataTreeNode { @@ -47,7 +49,7 @@ function createAsyncDataTreeNode(props: IAsyncDataTreeNodeRequiredPro refreshPromise: undefined, stale: true, slow: false, - collapsedByDefault: undefined + forceExpanded: false }; } @@ -321,7 +323,7 @@ export class AsyncDataTree implements IDisposable protected readonly root: IAsyncDataTreeNode; private readonly nodes = new Map>(); private readonly sorter?: ITreeSorter; - private readonly collapseByDefault?: { (e: T): boolean }; + private readonly getDefaultCollapseState: { (e: T): undefined | ObjectTreeElementCollapseState.PreserveOrCollapsed | ObjectTreeElementCollapseState.PreserveOrExpanded }; private readonly subTreeRefreshPromises = new Map, Promise>(); private readonly refreshPromises = new Map, CancelablePromise>>(); @@ -387,7 +389,7 @@ export class AsyncDataTree implements IDisposable this.identityProvider = options.identityProvider; this.autoExpandSingleChildren = typeof options.autoExpandSingleChildren === 'undefined' ? false : options.autoExpandSingleChildren; this.sorter = options.sorter; - this.collapseByDefault = options.collapseByDefault; + this.getDefaultCollapseState = e => options.collapseByDefault ? (options.collapseByDefault(e) ? ObjectTreeElementCollapseState.PreserveOrCollapsed : ObjectTreeElementCollapseState.PreserveOrExpanded) : undefined; this.tree = this.createTree(user, container, delegate, renderers, options); this.onDidChangeFindMode = this.tree.onDidChangeFindMode; @@ -395,7 +397,8 @@ export class AsyncDataTree implements IDisposable this.root = createAsyncDataTreeNode({ element: undefined!, parent: null, - hasChildren: true + hasChildren: true, + defaultCollapseState: undefined }); if (this.identityProvider) { @@ -935,10 +938,9 @@ export class AsyncDataTree implements IDisposable const hasChildren = !!this.dataSource.hasChildren(element); if (!this.identityProvider) { - const asyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, hasChildren }); + const asyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, hasChildren, defaultCollapseState: this.getDefaultCollapseState(element) }); - if (hasChildren && this.collapseByDefault && !this.collapseByDefault(element)) { - asyncDataTreeNode.collapsedByDefault = false; + if (hasChildren && asyncDataTreeNode.defaultCollapseState === ObjectTreeElementCollapseState.PreserveOrExpanded) { childrenToRefresh.push(asyncDataTreeNode); } @@ -966,15 +968,14 @@ export class AsyncDataTree implements IDisposable } else { childrenToRefresh.push(asyncDataTreeNode); } - } else if (hasChildren && this.collapseByDefault && !this.collapseByDefault(element)) { - asyncDataTreeNode.collapsedByDefault = false; + } else if (hasChildren && !result.collapsed) { childrenToRefresh.push(asyncDataTreeNode); } return asyncDataTreeNode; } - const childAsyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, id, hasChildren }); + const childAsyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, id, hasChildren, defaultCollapseState: this.getDefaultCollapseState(element) }); if (viewStateContext && viewStateContext.viewState.focus && viewStateContext.viewState.focus.indexOf(id) > -1) { viewStateContext.focus.push(childAsyncDataTreeNode); @@ -986,8 +987,7 @@ export class AsyncDataTree implements IDisposable if (viewStateContext && viewStateContext.viewState.expanded && viewStateContext.viewState.expanded.indexOf(id) > -1) { childrenToRefresh.push(childAsyncDataTreeNode); - } else if (hasChildren && this.collapseByDefault && !this.collapseByDefault(element)) { - childAsyncDataTreeNode.collapsedByDefault = false; + } else if (hasChildren && childAsyncDataTreeNode.defaultCollapseState === ObjectTreeElementCollapseState.PreserveOrExpanded) { childrenToRefresh.push(childAsyncDataTreeNode); } @@ -1006,7 +1006,7 @@ export class AsyncDataTree implements IDisposable // TODO@joao this doesn't take filter into account if (node !== this.root && this.autoExpandSingleChildren && children.length === 1 && childrenToRefresh.length === 0) { - children[0].collapsedByDefault = false; + children[0].forceExpanded = true; childrenToRefresh.push(children[0]); } @@ -1042,16 +1042,17 @@ export class AsyncDataTree implements IDisposable }; } - let collapsed: boolean | undefined; + let collapsed: boolean | ObjectTreeElementCollapseState.PreserveOrCollapsed | ObjectTreeElementCollapseState.PreserveOrExpanded | undefined; if (viewStateContext && viewStateContext.viewState.expanded && node.id && viewStateContext.viewState.expanded.indexOf(node.id) > -1) { collapsed = false; + } else if (node.forceExpanded) { + collapsed = false; + node.forceExpanded = false; } else { - collapsed = node.collapsedByDefault; + collapsed = node.defaultCollapseState; } - node.collapsedByDefault = undefined; - return { element: node, children: node.hasChildren ? Iterable.map(node.children, child => this.asTreeElement(child, viewStateContext)) : [], diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index fe7b653a580..abc2aed919a 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -426,7 +426,6 @@ export class ThrottledDelayer { * A barrier that is initially closed and then becomes opened permanently. */ export class Barrier { - private _isOpen: boolean; private _promise: Promise; private _completePromise!: (v: boolean) => void; diff --git a/src/vs/base/common/htmlContent.ts b/src/vs/base/common/htmlContent.ts index d16621579af..0b57e625295 100644 --- a/src/vs/base/common/htmlContent.ts +++ b/src/vs/base/common/htmlContent.ts @@ -71,11 +71,7 @@ export class MarkdownString implements IMarkdownString { } appendCodeblock(langId: string, code: string): MarkdownString { - this.value += '\n```'; - this.value += langId; - this.value += '\n'; - this.value += code; - this.value += '\n```\n'; + this.value += `\n${appendEscapedMarkdownCodeBlockFence(code, langId)}\n`; return this; } @@ -143,6 +139,24 @@ export function escapeMarkdownSyntaxTokens(text: string): string { return text.replace(/[\\`*_{}[\]()#+\-!~]/g, '\\$&'); // CodeQL [SM02383] Backslash is escaped in the character class } +/** + * @see https://github.com/microsoft/vscode/issues/193746 + */ +export function appendEscapedMarkdownCodeBlockFence(code: string, langId: string) { + const longestFenceLength = + code.match(/^`+/gm)?.reduce((a, b) => (a.length > b.length ? a : b)).length ?? + 0; + const desiredFenceLength = + longestFenceLength >= 3 ? longestFenceLength + 1 : 3; + + // the markdown result + return [ + `${'`'.repeat(desiredFenceLength)}${langId}`, + code, + `${'`'.repeat(desiredFenceLength)}`, + ].join('\n'); +} + export function escapeDoubleQuotes(input: string) { return input.replace(/"/g, '"'); } diff --git a/src/vs/base/common/product.ts b/src/vs/base/common/product.ts index 61a1623d76d..3cdab02a17b 100644 --- a/src/vs/base/common/product.ts +++ b/src/vs/base/common/product.ts @@ -226,8 +226,11 @@ export type IFileContentCondition = (IFileLanguageCondition | IFilePathCondition export interface IAppCenterConfiguration { readonly 'win32-x64': string; + readonly 'win32-arm64': string; readonly 'linux-x64': string; readonly 'darwin': string; + readonly 'darwin-universal': string; + readonly 'darwin-arm64': string; } export interface IConfigBasedExtensionTip { diff --git a/src/vs/base/parts/ipc/test/node/ipc.net.test.ts b/src/vs/base/parts/ipc/test/node/ipc.net.test.ts index 8255c780ccf..0e018300cea 100644 --- a/src/vs/base/parts/ipc/test/node/ipc.net.test.ts +++ b/src/vs/base/parts/ipc/test/node/ipc.net.test.ts @@ -571,6 +571,8 @@ flakySuite('IPC, create handle', () => { suite('WebSocketNodeSocket', () => { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + function toUint8Array(data: number[]): Uint8Array { const result = new Uint8Array(data.length); for (let i = 0; i < data.length; i++) { @@ -724,15 +726,15 @@ suite('WebSocketNodeSocket', () => { server.close(); const webSocketNodeSocket = new WebSocketNodeSocket(new NodeSocket(socket), true, null, false); - webSocketNodeSocket.onData((data) => { + ds.add(webSocketNodeSocket.onData((data) => { receivingSideOnDataCallCount++; receivingSideTotalBytes += data.byteLength; - }); + })); - webSocketNodeSocket.onClose(() => { + ds.add(webSocketNodeSocket.onClose(() => { webSocketNodeSocket.dispose(); receivingSideSocketClosedBarrier.open(); - }); + })); }); const socket = connect({ diff --git a/src/vs/base/test/browser/ui/list/rangeMap.test.ts b/src/vs/base/test/browser/ui/list/rangeMap.test.ts index 0171250324b..5b3b4a6c65f 100644 --- a/src/vs/base/test/browser/ui/list/rangeMap.test.ts +++ b/src/vs/base/test/browser/ui/list/rangeMap.test.ts @@ -361,6 +361,8 @@ suite('RangeMap', () => { suite('RangeMap with top padding', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('empty', () => { const rangeMap = new RangeMap(10); assert.strictEqual(rangeMap.size, 10); diff --git a/src/vs/base/test/browser/ui/tree/asyncDataTree.test.ts b/src/vs/base/test/browser/ui/tree/asyncDataTree.test.ts index 1f77768b7ed..24640e6cf65 100644 --- a/src/vs/base/test/browser/ui/tree/asyncDataTree.test.ts +++ b/src/vs/base/test/browser/ui/tree/asyncDataTree.test.ts @@ -5,8 +5,10 @@ import * as assert from 'assert'; import { IIdentityProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; -import { AsyncDataTree } from 'vs/base/browser/ui/tree/asyncDataTree'; -import { IAsyncDataSource, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; +import { AsyncDataTree, CompressibleAsyncDataTree, ITreeCompressionDelegate } from 'vs/base/browser/ui/tree/asyncDataTree'; +import { ICompressedTreeNode } from 'vs/base/browser/ui/tree/compressedObjectTreeModel'; +import { ICompressibleTreeRenderer } from 'vs/base/browser/ui/tree/objectTree'; +import { IAsyncDataSource, ITreeNode } from 'vs/base/browser/ui/tree/tree'; import { timeout } from 'vs/base/common/async'; import { Iterable } from 'vs/base/common/iterator'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; @@ -37,7 +39,7 @@ function find(element: Element, id: string): Element | undefined { return undefined; } -class Renderer implements ITreeRenderer { +class Renderer implements ICompressibleTreeRenderer { readonly templateId = 'default'; renderTemplate(container: HTMLElement): HTMLElement { return container; @@ -48,6 +50,15 @@ class Renderer implements ITreeRenderer { disposeTemplate(templateData: HTMLElement): void { // noop } + renderCompressedElements(node: ITreeNode, void>, index: number, templateData: HTMLElement, height: number | undefined): void { + const result: string[] = []; + + for (const element of node.element.elements) { + result.push(element.id + (element.suffix || '')); + } + + templateData.textContent = result.join('/'); + } } class IdentityProvider implements IIdentityProvider { @@ -520,4 +531,49 @@ suite('AsyncDataTree', function () { assert(tree.isCollapsible(a), 'a is still collapsible'); assert(!tree.isCollapsed(a), 'a is expanded'); }); + + test('issue #199441', async () => { + const container = document.createElement('div'); + + const dataSource = new class implements IAsyncDataSource { + hasChildren(element: Element): boolean { + return !!element.children && element.children.length > 0; + } + async getChildren(element: Element) { + return element.children ?? Iterable.empty(); + } + }; + + const compressionDelegate = new class implements ITreeCompressionDelegate { + isIncompressible(element: Element): boolean { + return !dataSource.hasChildren(element); + } + }; + + const model = new Model({ + id: 'root', + children: [{ + id: 'a', children: [{ + id: 'b', + children: [{ id: 'b.txt' }] + }] + }] + }); + + const collapseByDefault = (element: Element) => false; + + const tree = store.add(new CompressibleAsyncDataTree('test', container, new VirtualDelegate(), compressionDelegate, [new Renderer()], dataSource, { identityProvider: new IdentityProvider(), collapseByDefault })); + tree.layout(200); + + await tree.setInput(model.root); + assert.deepStrictEqual(Array.from(container.querySelectorAll('.monaco-list-row')).map(e => e.textContent), ['a/b', 'b.txt']); + + model.get('a').children!.push({ + id: 'c', + children: [{ id: 'c.txt' }] + }); + + await tree.updateChildren(model.root, true); + assert.deepStrictEqual(Array.from(container.querySelectorAll('.monaco-list-row')).map(e => e.textContent), ['a', 'b', 'b.txt', 'c', 'c.txt']); + }); }); diff --git a/src/vs/base/test/browser/ui/tree/objectTree.test.ts b/src/vs/base/test/browser/ui/tree/objectTree.test.ts index a3e39846a5b..05594bf561a 100644 --- a/src/vs/base/test/browser/ui/tree/objectTree.test.ts +++ b/src/vs/base/test/browser/ui/tree/objectTree.test.ts @@ -250,12 +250,14 @@ suite('CompressibleObjectTree', function () { disposeTemplate(): void { } } + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + test('empty', function () { const container = document.createElement('div'); container.style.width = '200px'; container.style.height = '200px'; - const tree = new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()]); + const tree = ds.add(new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()])); tree.layout(200); assert.strictEqual(getRowsTextContent(container).length, 0); @@ -266,7 +268,7 @@ suite('CompressibleObjectTree', function () { container.style.width = '200px'; container.style.height = '200px'; - const tree = new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()]); + const tree = ds.add(new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()])); tree.layout(200); tree.setChildren(null, [ @@ -289,7 +291,7 @@ suite('CompressibleObjectTree', function () { container.style.width = '200px'; container.style.height = '200px'; - const tree = new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()]); + const tree = ds.add(new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()])); tree.layout(200); tree.setChildren(null, [ @@ -341,7 +343,7 @@ suite('CompressibleObjectTree', function () { container.style.width = '200px'; container.style.height = '200px'; - const tree = new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()]); + const tree = ds.add(new CompressibleObjectTree('test', container, new Delegate(), [new Renderer()])); tree.layout(200); tree.setChildren(null, [ diff --git a/src/vs/base/test/common/event.test.ts b/src/vs/base/test/common/event.test.ts index 2231acac008..df7aac4363d 100644 --- a/src/vs/base/test/common/event.test.ts +++ b/src/vs/base/test/common/event.test.ts @@ -40,11 +40,17 @@ namespace Samples { this._onDidChange.fire(value); } + dispose() { + this._onDidChange.dispose(); + } + } } suite('Event utils dispose', function () { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + let tracker = new DisposableTracker(); function assertDisposablesCount(expected: number | Array) { @@ -75,7 +81,7 @@ suite('Event utils dispose', function () { test('no leak with snapshot-utils', function () { const store = new DisposableStore(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const evens = Event.filter(emitter.event, n => n % 2 === 0, store); assertDisposablesCount(1); // snaphot only listen when `evens` is being listened on @@ -91,7 +97,7 @@ suite('Event utils dispose', function () { test('no leak with debounce-util', function () { const store = new DisposableStore(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l) => 0, undefined, undefined, undefined, undefined, store); assertDisposablesCount(1); // debounce only listens when `debounce` is being listened on @@ -109,13 +115,15 @@ suite('Event utils dispose', function () { suite('Event', function () { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + const counter = new Samples.EventCounter(); setup(() => counter.reset()); test('Emitter plain', function () { - const doc = new Samples.Document3(); + const doc = ds.add(new Samples.Document3()); const subscription = doc.onDidChange(counter.onEvent, counter); @@ -133,10 +141,10 @@ suite('Event', function () { const a = (v: string) => calls.push(`a${v}`); const b = (v: string) => calls.push(`b${v}`); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); - emitter.event(a); - emitter.event(b); + ds.add(emitter.event(a)); + ds.add(emitter.event(b)); const s2 = emitter.event(a); emitter.fire('1'); @@ -150,14 +158,14 @@ suite('Event', function () { test('Emitter, dispose listener during emission', () => { for (let keepFirstMod = 1; keepFirstMod < 4; keepFirstMod++) { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const calls: number[] = []; - const disposables = Array.from({ length: 25 }, (_, n) => emitter.event(() => { + const disposables = Array.from({ length: 25 }, (_, n) => ds.add(emitter.event(() => { if (n % keepFirstMod === 0) { disposables[n].dispose(); } calls.push(n); - })); + }))); emitter.fire(); assert.deepStrictEqual(calls, Array.from({ length: 25 }, (_, n) => n)); @@ -165,14 +173,14 @@ suite('Event', function () { }); test('Emitter, dispose emitter during emission', () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const calls: number[] = []; - const disposables = Array.from({ length: 25 }, (_, n) => emitter.event(() => { + const disposables = Array.from({ length: 25 }, (_, n) => ds.add(emitter.event(() => { if (n === 10) { emitter.dispose(); } calls.push(n); - })); + }))); emitter.fire(); disposables.forEach(d => d.dispose()); @@ -181,15 +189,15 @@ suite('Event', function () { test('Emitter, shared delivery queue', () => { const deliveryQueue = createEventDeliveryQueue(); - const emitter1 = new Emitter({ deliveryQueue }); - const emitter2 = new Emitter({ deliveryQueue }); + const emitter1 = ds.add(new Emitter({ deliveryQueue })); + const emitter2 = ds.add(new Emitter({ deliveryQueue })); const calls: string[] = []; - emitter1.event(d => { calls.push(`${d}a`); if (d === 1) { emitter2.fire(2); } }); - emitter1.event(d => { calls.push(`${d}b`); }); + ds.add(emitter1.event(d => { calls.push(`${d}a`); if (d === 1) { emitter2.fire(2); } })); + ds.add(emitter1.event(d => { calls.push(`${d}b`); })); - emitter2.event(d => { calls.push(`${d}c`); emitter1.dispose(); }); - emitter2.event(d => { calls.push(`${d}d`); }); + ds.add(emitter2.event(d => { calls.push(`${d}c`); emitter1.dispose(); })); + ds.add(emitter2.event(d => { calls.push(`${d}d`); })); emitter1.fire(1); @@ -201,13 +209,13 @@ suite('Event', function () { test('Emitter, handles removal during 3', () => { const fn1 = stub(); const fn2 = stub(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); - emitter.event(fn1); + ds.add(emitter.event(fn1)); const h = emitter.event(() => { h.dispose(); }); - emitter.event(fn2); + ds.add(emitter.event(fn2)); emitter.fire('foo'); assert.deepStrictEqual(fn2.args, [['foo']]); @@ -216,9 +224,9 @@ suite('Event', function () { test('Emitter, handles removal during 2', () => { const fn1 = stub(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); - emitter.event(fn1); + ds.add(emitter.event(fn1)); const h = emitter.event(() => { h.dispose(); }); @@ -230,7 +238,7 @@ suite('Event', function () { test('Emitter, bucket', function () { const bucket: IDisposable[] = []; - const doc = new Samples.Document3(); + const doc = ds.add(new Samples.Document3()); const subscription = doc.onDidChange(counter.onEvent, counter, bucket); doc.setText('far'); @@ -251,8 +259,8 @@ suite('Event', function () { test('Emitter, store', function () { - const bucket = new DisposableStore(); - const doc = new Samples.Document3(); + const bucket = ds.add(new DisposableStore()); + const doc = ds.add(new Samples.Document3()); const subscription = doc.onDidChange(counter.onEvent, counter, bucket); doc.setText('far'); @@ -273,16 +281,16 @@ suite('Event', function () { let firstCount = 0; let lastCount = 0; - const a = new Emitter({ + const a = ds.add(new Emitter({ onWillAddFirstListener() { firstCount += 1; }, onDidRemoveLastListener() { lastCount += 1; } - }); + })); assert.strictEqual(firstCount, 0); assert.strictEqual(lastCount, 0); - let subscription1 = a.event(function () { }); - const subscription2 = a.event(function () { }); + let subscription1 = ds.add(a.event(function () { })); + const subscription2 = ds.add(a.event(function () { })); assert.strictEqual(firstCount, 1); assert.strictEqual(lastCount, 0); @@ -294,26 +302,26 @@ suite('Event', function () { assert.strictEqual(firstCount, 1); assert.strictEqual(lastCount, 1); - subscription1 = a.event(function () { }); + subscription1 = ds.add(a.event(function () { })); assert.strictEqual(firstCount, 2); assert.strictEqual(lastCount, 1); }); test('onWillRemoveListener', () => { let count = 0; - const a = new Emitter({ + const a = ds.add(new Emitter({ onWillRemoveListener() { count += 1; } - }); + })); assert.strictEqual(count, 0); - let subscription = a.event(function () { }); + let subscription = ds.add(a.event(function () { })); assert.strictEqual(count, 0); subscription.dispose(); assert.strictEqual(count, 1); - subscription = a.event(function () { }); + subscription = ds.add(a.event(function () { })); assert.strictEqual(count, 1); }); @@ -322,15 +330,15 @@ suite('Event', function () { setUnexpectedErrorHandler(() => null); try { - const a = new Emitter(); + const a = ds.add(new Emitter()); let hit = false; - a.event(function () { + ds.add(a.event(function () { // eslint-disable-next-line no-throw-literal throw 9; - }); - a.event(function () { + })); + ds.add(a.event(function () { hit = true; - }); + })); a.fire(undefined); assert.strictEqual(hit, true); @@ -343,17 +351,17 @@ suite('Event', function () { const allError: any[] = []; - const a = new Emitter({ + const a = ds.add(new Emitter({ onListenerError(e) { allError.push(e); } - }); + })); let hit = false; - a.event(function () { + ds.add(a.event(function () { // eslint-disable-next-line no-throw-literal throw 9; - }); - a.event(function () { + })); + ds.add(a.event(function () { hit = true; - }); + })); a.fire(undefined); assert.strictEqual(hit, true); assert.deepStrictEqual(allError, [9]); @@ -367,7 +375,7 @@ suite('Event', function () { } const context = {}; - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const reg1 = emitter.event(listener, context); const reg2 = emitter.event(listener, context); @@ -395,7 +403,7 @@ suite('Event', function () { } }); - emitter.event(e => { sum = e; }); + ds.add(emitter.event(e => { sum = e; })); const p = Event.toPromise(emitter.event); @@ -433,18 +441,18 @@ suite('Event', function () { }); test('Emitter - In Order Delivery', function () { - const a = new Emitter(); + const a = ds.add(new Emitter()); const listener2Events: string[] = []; - a.event(function listener1(event) { + ds.add(a.event(function listener1(event) { if (event === 'e1') { a.fire('e2'); // assert that all events are delivered at this point assert.deepStrictEqual(listener2Events, ['e1', 'e2']); } - }); - a.event(function listener2(event) { + })); + ds.add(a.event(function listener2(event) { listener2Events.push(event); - }); + })); a.fire('e1'); // assert that all events are delivered in order @@ -452,25 +460,25 @@ suite('Event', function () { }); test('Emitter, - In Order Delivery 3x', function () { - const a = new Emitter(); + const a = ds.add(new Emitter()); const listener2Events: string[] = []; - a.event(function listener1(event) { + ds.add(a.event(function listener1(event) { if (event === 'e2') { a.fire('e3'); // assert that all events are delivered at this point assert.deepStrictEqual(listener2Events, ['e1', 'e2', 'e3']); } - }); - a.event(function listener1(event) { + })); + ds.add(a.event(function listener1(event) { if (event === 'e1') { a.fire('e2'); // assert that all events are delivered at this point assert.deepStrictEqual(listener2Events, ['e1', 'e2', 'e3']); } - }); - a.event(function listener2(event) { + })); + ds.add(a.event(function listener2(event) { listener2Events.push(event); - }); + })); a.fire('e1'); // assert that all events are delivered in order @@ -478,7 +486,7 @@ suite('Event', function () { }); test('Cannot read property \'_actual\' of undefined #142204', function () { - const e = new Emitter(); + const e = ds.add(new Emitter()); const dispo = e.event(() => { }); dispo.dispose.call(undefined); // assert that disposable can be called with this }); @@ -486,6 +494,8 @@ suite('Event', function () { suite('AsyncEmitter', function () { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + test('event has waitUntil-function', async function () { interface E extends IWaitUntil { @@ -495,11 +505,11 @@ suite('AsyncEmitter', function () { const emitter = new AsyncEmitter(); - emitter.event(e => { + ds.add(emitter.event(e => { assert.strictEqual(e.foo, true); assert.strictEqual(e.bar, 1); assert.strictEqual(typeof e.waitUntil, 'function'); - }); + })); emitter.fireAsync({ foo: true, bar: 1, }, CancellationToken.None); emitter.dispose(); @@ -515,19 +525,19 @@ suite('AsyncEmitter', function () { let globalState = 0; const emitter = new AsyncEmitter(); - emitter.event(e => { + ds.add(emitter.event(e => { e.waitUntil(timeout(10).then(_ => { assert.strictEqual(globalState, 0); globalState += 1; })); - }); + })); - emitter.event(e => { + ds.add(emitter.event(e => { e.waitUntil(timeout(1).then(_ => { assert.strictEqual(globalState, 1); globalState += 1; })); - }); + })); await emitter.fireAsync({ foo: true }, CancellationToken.None); assert.strictEqual(globalState, 2); @@ -545,7 +555,7 @@ suite('AsyncEmitter', function () { const emitter = new AsyncEmitter(); // e1 - emitter.event(e => { + ds.add(emitter.event(e => { e.waitUntil(timeout(10).then(async _ => { if (e.foo === 1) { await emitter.fireAsync({ foo: 2 }, CancellationToken.None); @@ -553,13 +563,13 @@ suite('AsyncEmitter', function () { done = true; } })); - }); + })); // e2 - emitter.event(e => { + ds.add(emitter.event(e => { events.push(e.foo); e.waitUntil(timeout(7)); - }); + })); await emitter.fireAsync({ foo: 1 }, CancellationToken.None); assert.ok(done); @@ -577,16 +587,16 @@ suite('AsyncEmitter', function () { let globalState = 0; const emitter = new AsyncEmitter(); - emitter.event(e => { + ds.add(emitter.event(e => { globalState += 1; e.waitUntil(new Promise((_r, reject) => reject(new Error()))); - }); + })); - emitter.event(e => { + ds.add(emitter.event(e => { globalState += 1; e.waitUntil(timeout(10)); e.waitUntil(timeout(20).then(() => globalState++)); // multiple `waitUntil` are supported and awaited on - }); + })); await emitter.fireAsync({ foo: true }, CancellationToken.None).then(() => { assert.strictEqual(globalState, 3); @@ -601,11 +611,13 @@ suite('AsyncEmitter', function () { suite('PausableEmitter', function () { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + test('basic', function () { const data: number[] = []; - const emitter = new PauseableEmitter(); + const emitter = ds.add(new PauseableEmitter()); - emitter.event(e => data.push(e)); + ds.add(emitter.event(e => data.push(e))); emitter.fire(1); emitter.fire(2); @@ -614,9 +626,9 @@ suite('PausableEmitter', function () { test('pause/resume - no merge', function () { const data: number[] = []; - const emitter = new PauseableEmitter(); + const emitter = ds.add(new PauseableEmitter()); - emitter.event(e => data.push(e)); + ds.add(emitter.event(e => data.push(e))); emitter.fire(1); emitter.fire(2); assert.deepStrictEqual(data, [1, 2]); @@ -634,9 +646,9 @@ suite('PausableEmitter', function () { test('pause/resume - merge', function () { const data: number[] = []; - const emitter = new PauseableEmitter({ merge: (a) => a.reduce((p, c) => p + c, 0) }); + const emitter = ds.add(new PauseableEmitter({ merge: (a) => a.reduce((p, c) => p + c, 0) })); - emitter.event(e => data.push(e)); + ds.add(emitter.event(e => data.push(e))); emitter.fire(1); emitter.fire(2); assert.deepStrictEqual(data, [1, 2]); @@ -655,9 +667,9 @@ suite('PausableEmitter', function () { test('double pause/resume', function () { const data: number[] = []; - const emitter = new PauseableEmitter(); + const emitter = ds.add(new PauseableEmitter()); - emitter.event(e => data.push(e)); + ds.add(emitter.event(e => data.push(e))); emitter.fire(1); emitter.fire(2); assert.deepStrictEqual(data, [1, 2]); @@ -680,9 +692,9 @@ suite('PausableEmitter', function () { test('resume, no pause', function () { const data: number[] = []; - const emitter = new PauseableEmitter(); + const emitter = ds.add(new PauseableEmitter()); - emitter.event(e => data.push(e)); + ds.add(emitter.event(e => data.push(e))); emitter.fire(1); emitter.fire(2); assert.deepStrictEqual(data, [1, 2]); @@ -694,20 +706,20 @@ suite('PausableEmitter', function () { test('nested pause', function () { const data: number[] = []; - const emitter = new PauseableEmitter(); + const emitter = ds.add(new PauseableEmitter()); let once = true; - emitter.event(e => { + ds.add(emitter.event(e => { data.push(e); if (once) { emitter.pause(); once = false; } - }); - emitter.event(e => { + })); + ds.add(emitter.event(e => { data.push(e); - }); + })); emitter.pause(); emitter.fire(1); @@ -727,8 +739,8 @@ suite('PausableEmitter', function () { test('empty pause with merge', function () { const data: number[] = []; - const emitter = new PauseableEmitter({ merge: a => a[0] }); - emitter.event(e => data.push(1)); + const emitter = ds.add(new PauseableEmitter({ merge: a => a[0] })); + ds.add(emitter.event(e => data.push(1))); emitter.pause(); emitter.resume(); @@ -766,12 +778,14 @@ suite('Event utils - ensureNoDisposablesAreLeakedInTestSuite', function () { suite('Event utils', () => { + const ds = ensureNoDisposablesAreLeakedInTestSuite(); + suite('EventBufferer', () => { test('should not buffer when not wrapped', () => { const bufferer = new EventBufferer(); const counter = new Samples.EventCounter(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = bufferer.wrapEvent(emitter.event); const listener = event(counter.onEvent, counter); @@ -789,7 +803,7 @@ suite('Event utils', () => { test('should buffer when wrapped', () => { const bufferer = new EventBufferer(); const counter = new Samples.EventCounter(); - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = bufferer.wrapEvent(emitter.event); const listener = event(counter.onEvent, counter); @@ -812,7 +826,7 @@ suite('Event utils', () => { }); test('once', () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); let counter1 = 0, counter2 = 0, counter3 = 0; @@ -844,7 +858,7 @@ suite('Event utils', () => { test('should buffer events', () => { const result: number[] = []; - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = emitter.event; const bufferedEvent = Event.buffer(event); @@ -866,7 +880,7 @@ suite('Event utils', () => { test('should buffer events on next tick', async () => { const result: number[] = []; - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = emitter.event; const bufferedEvent = Event.buffer(event, true); @@ -888,7 +902,7 @@ suite('Event utils', () => { test('should fire initial buffer events', () => { const result: number[] = []; - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = emitter.event; const bufferedEvent = Event.buffer(event, false, [-2, -1, 0]); @@ -897,7 +911,7 @@ suite('Event utils', () => { emitter.fire(3); assert.deepStrictEqual(result, [] as number[]); - bufferedEvent(num => result.push(num)); + ds.add(bufferedEvent(num => result.push(num))); assert.deepStrictEqual(result, [-2, -1, 0, 1, 2, 3]); }); }); @@ -907,10 +921,10 @@ suite('Event utils', () => { test('works', () => { const result: number[] = []; const m = new EventMultiplexer(); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); - const e1 = new Emitter(); - m.add(e1.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); assert.deepStrictEqual(result, []); @@ -921,10 +935,10 @@ suite('Event utils', () => { test('multiplexer dispose works', () => { const result: number[] = []; const m = new EventMultiplexer(); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); - const e1 = new Emitter(); - m.add(e1.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); assert.deepStrictEqual(result, []); @@ -941,10 +955,10 @@ suite('Event utils', () => { test('event dispose works', () => { const result: number[] = []; const m = new EventMultiplexer(); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); - const e1 = new Emitter(); - m.add(e1.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); assert.deepStrictEqual(result, []); @@ -961,9 +975,9 @@ suite('Event utils', () => { test('mutliplexer event dispose works', () => { const result: number[] = []; const m = new EventMultiplexer(); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); - const e1 = new Emitter(); + const e1 = ds.add(new Emitter()); const l1 = m.add(e1.event); assert.deepStrictEqual(result, []); @@ -981,14 +995,14 @@ suite('Event utils', () => { test('hot start works', () => { const result: number[] = []; const m = new EventMultiplexer(); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); - const e1 = new Emitter(); - m.add(e1.event); - const e2 = new Emitter(); - m.add(e2.event); - const e3 = new Emitter(); - m.add(e3.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); + const e2 = ds.add(new Emitter()); + ds.add(m.add(e2.event)); + const e3 = ds.add(new Emitter()); + ds.add(m.add(e3.event)); e1.fire(1); e2.fire(2); @@ -1000,14 +1014,14 @@ suite('Event utils', () => { const result: number[] = []; const m = new EventMultiplexer(); - const e1 = new Emitter(); - m.add(e1.event); - const e2 = new Emitter(); - m.add(e2.event); - const e3 = new Emitter(); - m.add(e3.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); + const e2 = ds.add(new Emitter()); + ds.add(m.add(e2.event)); + const e3 = ds.add(new Emitter()); + ds.add(m.add(e3.event)); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); e1.fire(1); e2.fire(2); @@ -1019,18 +1033,18 @@ suite('Event utils', () => { const result: number[] = []; const m = new EventMultiplexer(); - const e1 = new Emitter(); - m.add(e1.event); - const e2 = new Emitter(); - m.add(e2.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); + const e2 = ds.add(new Emitter()); + ds.add(m.add(e2.event)); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); e1.fire(1); e2.fire(2); - const e3 = new Emitter(); - m.add(e3.event); + const e3 = ds.add(new Emitter()); + ds.add(m.add(e3.event)); e3.fire(3); assert.deepStrictEqual(result, [1, 2, 3]); @@ -1040,17 +1054,17 @@ suite('Event utils', () => { const result: number[] = []; const m = new EventMultiplexer(); - const e1 = new Emitter(); - m.add(e1.event); - const e2 = new Emitter(); - m.add(e2.event); + const e1 = ds.add(new Emitter()); + ds.add(m.add(e1.event)); + const e2 = ds.add(new Emitter()); + ds.add(m.add(e2.event)); - m.event(r => result.push(r)); + ds.add(m.event(r => result.push(r))); e1.fire(1); e2.fire(2); - const e3 = new Emitter(); + const e3 = ds.add(new Emitter()); const l3 = m.add(e3.event); e3.fire(3); assert.deepStrictEqual(result, [1, 2, 3]); @@ -1066,22 +1080,24 @@ suite('Event utils', () => { }); suite('DynamicListEventMultiplexer', () => { + let addEmitter: Emitter; + let removeEmitter: Emitter; const recordedEvents: number[] = []; - const addEmitter = new Emitter(); - const removeEmitter = new Emitter(); class TestItem { - readonly onTestEventEmitter = new Emitter(); + readonly onTestEventEmitter = ds.add(new Emitter()); readonly onTestEvent = this.onTestEventEmitter.event; } let items: TestItem[]; let m: DynamicListEventMultiplexer; setup(() => { + addEmitter = ds.add(new Emitter()); + removeEmitter = ds.add(new Emitter()); items = [new TestItem(), new TestItem()]; for (const [i, item] of items.entries()) { - item.onTestEvent(e => `${i}:${e}`); + ds.add(item.onTestEvent(e => `${i}:${e}`)); } m = new DynamicListEventMultiplexer(items, addEmitter.event, removeEmitter.event, e => e.onTestEvent); - m.event(e => recordedEvents.push(e)); + ds.add(m.event(e => recordedEvents.push(e))); recordedEvents.length = 0; }); teardown(() => m.dispose()); @@ -1112,11 +1128,11 @@ suite('Event utils', () => { }); test('latch', () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const event = Event.latch(emitter.event); const result: number[] = []; - const listener = event(num => result.push(num)); + const listener = ds.add(event(num => result.push(num))); assert.deepStrictEqual(result, []); @@ -1148,11 +1164,11 @@ suite('Event utils', () => { }); test('dispose is reentrant', () => { - const emitter = new Emitter({ + const emitter = ds.add(new Emitter({ onDidRemoveLastListener: () => { emitter.dispose(); } - }); + })); const listener = emitter.event(() => undefined); listener.dispose(); // should not crash @@ -1164,17 +1180,17 @@ suite('Event utils', () => { return new Promise(resolve => { let promise = new DeferredPromise(); - Event.fromPromise(promise.p)(e => { + ds.add(Event.fromPromise(promise.p)(e => { assert.strictEqual(e, 1); promise = new DeferredPromise(); - Event.fromPromise(promise.p)(() => { + ds.add(Event.fromPromise(promise.p)(() => { resolve(); - }); + })); promise.error(undefined); - }); + })); promise.complete(1); }); @@ -1185,16 +1201,16 @@ suite('Event utils', () => { let promise = new DeferredPromise(); promise.complete(1); - Event.fromPromise(promise.p)(e => { + ds.add(Event.fromPromise(promise.p)(e => { assert.strictEqual(e, 1); promise = new DeferredPromise(); promise.error(undefined); - Event.fromPromise(promise.p)(() => { + ds.add(Event.fromPromise(promise.p)(() => { resolve(); - }); - }); + })); + })); }); }); @@ -1202,8 +1218,8 @@ suite('Event utils', () => { suite('Relay', () => { test('should input work', () => { - const e1 = new Emitter(); - const e2 = new Emitter(); + const e1 = ds.add(new Emitter()); + const e2 = ds.add(new Emitter()); const relay = new Relay(); const result: number[] = []; @@ -1229,13 +1245,13 @@ suite('Event utils', () => { }); test('should Relay dispose work', () => { - const e1 = new Emitter(); - const e2 = new Emitter(); + const e1 = ds.add(new Emitter()); + const e2 = ds.add(new Emitter()); const relay = new Relay(); const result: number[] = []; const listener = (num: number) => result.push(num); - relay.event(listener); + ds.add(relay.event(listener)); e1.fire(1); assert.deepStrictEqual(result, []); @@ -1257,7 +1273,7 @@ suite('Event utils', () => { }); test('runAndSubscribeWithStore', () => { - const eventEmitter = new Emitter(); + const eventEmitter = ds.add(new Emitter()); const event = eventEmitter.event; let i = 0; @@ -1288,14 +1304,14 @@ suite('Event utils', () => { suite('accumulate', () => { test('should not fire after a listener is disposed with undefined or []', async () => { - const eventEmitter = new Emitter(); + const eventEmitter = ds.add(new Emitter()); const event = eventEmitter.event; const accumulated = Event.accumulate(event, 0); const calls1: number[][] = []; const calls2: number[][] = []; - const listener1 = accumulated((e) => calls1.push(e)); - accumulated((e) => calls2.push(e)); + const listener1 = ds.add(accumulated((e) => calls1.push(e))); + ds.add(accumulated((e) => calls2.push(e))); eventEmitter.fire(1); await timeout(1); @@ -1308,29 +1324,29 @@ suite('Event utils', () => { assert.deepStrictEqual(calls2, [[1]], 'should not fire after a listener is disposed with undefined or []'); }); test('should accumulate a single event', async () => { - const eventEmitter = new Emitter(); + const eventEmitter = ds.add(new Emitter()); const event = eventEmitter.event; const accumulated = Event.accumulate(event, 0); const results1 = await new Promise(r => { - accumulated(r); + ds.add(accumulated(r)); eventEmitter.fire(1); }); assert.deepStrictEqual(results1, [1]); const results2 = await new Promise(r => { - accumulated(r); + ds.add(accumulated(r)); eventEmitter.fire(2); }); assert.deepStrictEqual(results2, [2]); }); test('should accumulate multiple events', async () => { - const eventEmitter = new Emitter(); + const eventEmitter = ds.add(new Emitter()); const event = eventEmitter.event; const accumulated = Event.accumulate(event, 0); const results1 = await new Promise(r => { - accumulated(r); + ds.add(accumulated(r)); eventEmitter.fire(1); eventEmitter.fire(2); eventEmitter.fire(3); @@ -1338,7 +1354,7 @@ suite('Event utils', () => { assert.deepStrictEqual(results1, [1, 2, 3]); const results2 = await new Promise(r => { - accumulated(r); + ds.add(accumulated(r)); eventEmitter.fire(4); eventEmitter.fire(5); eventEmitter.fire(6); @@ -1351,7 +1367,7 @@ suite('Event utils', () => { suite('debounce', () => { test('simple', function (done: () => void) { - const doc = new Samples.Document3(); + const doc = ds.add(new Samples.Document3()); const onDocDidChange = Event.debounce(doc.onDidChange, (prev: string[] | undefined, cur) => { if (!prev) { @@ -1364,7 +1380,7 @@ suite('Event utils', () => { let count = 0; - onDocDidChange(keys => { + ds.add(onDocDidChange(keys => { count++; assert.ok(keys, 'was not expecting keys.'); if (count === 1) { @@ -1374,7 +1390,7 @@ suite('Event utils', () => { assert.deepStrictEqual(keys, ['4']); done(); } - }); + })); doc.setText('1'); doc.setText('2'); @@ -1383,7 +1399,7 @@ suite('Event utils', () => { test('microtask', function (done: () => void) { - const doc = new Samples.Document3(); + const doc = ds.add(new Samples.Document3()); const onDocDidChange = Event.debounce(doc.onDidChange, (prev: string[] | undefined, cur) => { if (!prev) { @@ -1396,7 +1412,7 @@ suite('Event utils', () => { let count = 0; - onDocDidChange(keys => { + ds.add(onDocDidChange(keys => { count++; assert.ok(keys, 'was not expecting keys.'); if (count === 1) { @@ -1406,7 +1422,7 @@ suite('Event utils', () => { assert.deepStrictEqual(keys, ['4']); done(); } - }); + })); doc.setText('1'); doc.setText('2'); @@ -1415,13 +1431,13 @@ suite('Event utils', () => { test('leading', async function () { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => e, 0, /*leading=*/true); let calls = 0; - debounced(() => { + ds.add(debounced(() => { calls++; - }); + })); // If the source event is fired once, the debounced (on the leading edge) event should be fired only once emitter.fire(); @@ -1431,13 +1447,13 @@ suite('Event utils', () => { }); test('leading (2)', async function () { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => e, 0, /*leading=*/true); let calls = 0; - debounced(() => { + ds.add(debounced(() => { calls++; - }); + })); // If the source event is fired multiple times, the debounced (on the leading edge) event should be fired twice emitter.fire(); @@ -1448,11 +1464,11 @@ suite('Event utils', () => { }); test('leading reset', async function () { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => l ? l + 1 : 1, 0, /*leading=*/true); const calls: number[] = []; - debounced((e) => calls.push(e)); + ds.add(debounced((e) => calls.push(e))); emitter.fire(1); emitter.fire(1); @@ -1462,11 +1478,11 @@ suite('Event utils', () => { }); test('should not flush events when a listener is disposed', async () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => l ? l + 1 : 1, 0); const calls: number[] = []; - const listener = debounced((e) => calls.push(e)); + const listener = ds.add(debounced((e) => calls.push(e))); emitter.fire(1); listener.dispose(); @@ -1478,11 +1494,11 @@ suite('Event utils', () => { }); test('flushOnListenerRemove - should flush events when a listener is disposed', async () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => l ? l + 1 : 1, 0, undefined, true); const calls: number[] = []; - const listener = debounced((e) => calls.push(e)); + const listener = ds.add(debounced((e) => calls.push(e))); emitter.fire(1); listener.dispose(); @@ -1494,11 +1510,11 @@ suite('Event utils', () => { }); test('should flush events when the emitter is disposed', async () => { - const emitter = new Emitter(); + const emitter = ds.add(new Emitter()); const debounced = Event.debounce(emitter.event, (l, e) => l ? l + 1 : 1, 0); const calls: number[] = []; - debounced((e) => calls.push(e)); + ds.add(debounced((e) => calls.push(e))); emitter.fire(1); emitter.dispose(); @@ -1509,26 +1525,17 @@ suite('Event utils', () => { }); suite('chain2', () => { - let store: DisposableStore; let em: Emitter; let calls: number[]; - teardown(() => { - store.dispose(); - }); - - ensureNoDisposablesAreLeakedInTestSuite(); - setup(() => { - store = new DisposableStore(); - em = new Emitter(); - store.add(em); + em = ds.add(new Emitter()); calls = []; }); test('maps', () => { const ev = Event.chain(em.event, $ => $.map(v => v * 2)); - store.add(ev(v => calls.push(v))); + ds.add(ev(v => calls.push(v))); em.fire(1); em.fire(2); em.fire(3); @@ -1537,7 +1544,7 @@ suite('Event utils', () => { test('filters', () => { const ev = Event.chain(em.event, $ => $.filter(v => v % 2 === 0)); - store.add(ev(v => calls.push(v))); + ds.add(ev(v => calls.push(v))); em.fire(1); em.fire(2); em.fire(3); @@ -1547,7 +1554,7 @@ suite('Event utils', () => { test('reduces', () => { const ev = Event.chain(em.event, $ => $.reduce((acc, v) => acc + v, 0)); - store.add(ev(v => calls.push(v))); + ds.add(ev(v => calls.push(v))); em.fire(1); em.fire(2); em.fire(3); @@ -1557,7 +1564,7 @@ suite('Event utils', () => { test('latches', () => { const ev = Event.chain(em.event, $ => $.latch()); - store.add(ev(v => calls.push(v))); + ds.add(ev(v => calls.push(v))); em.fire(1); em.fire(1); em.fire(2); @@ -1576,7 +1583,7 @@ suite('Event utils', () => { .latch() ); - store.add(ev(v => calls.push(v))); + ds.add(ev(v => calls.push(v))); em.fire(1); em.fire(2); em.fire(3); diff --git a/src/vs/base/test/common/filters.test.ts b/src/vs/base/test/common/filters.test.ts index c80a6f84132..df8d25f3dab 100644 --- a/src/vs/base/test/common/filters.test.ts +++ b/src/vs/base/test/common/filters.test.ts @@ -498,6 +498,11 @@ suite('Filters', () => { assertTopScore(fuzzyScore, '_lineS', 0, '_lineS', '_lines'); }); + test.skip('Bad completion ranking changes valid variable name to class name when pressing "." #187055', function () { + assertTopScore(fuzzyScore, 'a', 1, 'A', 'a'); + assertTopScore(fuzzyScore, 'theme', 1, 'Theme', 'theme'); + }); + test('HTML closing tag proposal filtered out #38880', function () { assertMatches('\t\t<', '\t\t', '^\t^\t^', fuzzyScore, { patternPos: 0 }); assertMatches('\t\t<', '\t\t', '\t\t^', fuzzyScore, { patternPos: 2 }); diff --git a/src/vs/base/test/common/history.test.ts b/src/vs/base/test/common/history.test.ts index eae79bb5afa..39143609b88 100644 --- a/src/vs/base/test/common/history.test.ts +++ b/src/vs/base/test/common/history.test.ts @@ -184,6 +184,8 @@ suite('History Navigator', () => { suite('History Navigator 2', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('constructor', () => { const testObject = new HistoryNavigator2(['1', '2', '3', '4']); diff --git a/src/vs/base/test/common/lifecycle.test.ts b/src/vs/base/test/common/lifecycle.test.ts index 22e8ff77e0f..103009b5219 100644 --- a/src/vs/base/test/common/lifecycle.test.ts +++ b/src/vs/base/test/common/lifecycle.test.ts @@ -13,8 +13,9 @@ class Disposable implements IDisposable { dispose() { this.isDisposed = true; } } +// Leaks are allowed here since we test lifecycle stuff: +// eslint-disable-next-line local/code-ensure-no-disposables-leak-in-test suite('Lifecycle', () => { - test('dispose single disposable', () => { const disposable = new Disposable(); @@ -129,6 +130,8 @@ suite('Lifecycle', () => { }); suite('DisposableStore', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('dispose should call all child disposes even if a child throws on dispose', () => { const disposedValues = new Set(); @@ -221,6 +224,8 @@ suite('DisposableStore', () => { }); suite('Reference Collection', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + class Collection extends ReferenceCollection { private _count = 0; get count() { return this._count; } diff --git a/src/vs/base/test/common/markdownString.test.ts b/src/vs/base/test/common/markdownString.test.ts index b008091a46f..a23573f610a 100644 --- a/src/vs/base/test/common/markdownString.test.ts +++ b/src/vs/base/test/common/markdownString.test.ts @@ -62,6 +62,51 @@ suite('MarkdownString', () => { ); }); + suite('appendCodeBlock', () => { + function assertCodeBlock(lang: string, code: string, result: string) { + const mds = new MarkdownString(); + mds.appendCodeblock(lang, code); + assert.strictEqual(mds.value, result); + } + + test('common cases', () => { + // no backticks + assertCodeBlock('ts', 'const a = 1;', `\n${[ + '```ts', + 'const a = 1;', + '```' + ].join('\n')}\n`); + // backticks + assertCodeBlock('ts', 'const a = `1`;', `\n${[ + '```ts', + 'const a = `1`;', + '```' + ].join('\n')}\n`); + }); + + // @see https://github.com/microsoft/vscode/issues/193746 + test('escape fence', () => { + // fence in the first line + assertCodeBlock('md', '```\n```', `\n${[ + '````md', + '```\n```', + '````' + ].join('\n')}\n`); + // fence in the middle of code + assertCodeBlock('md', '\n\n```\n```', `\n${[ + '````md', + '\n\n```\n```', + '````' + ].join('\n')}\n`); + // longer fence at the end of code + assertCodeBlock('md', '```\n```\n````\n````', `\n${[ + '`````md', + '```\n```\n````\n````', + '`````' + ].join('\n')}\n`); + }); + }); + suite('ThemeIcons', () => { suite('Support On', () => { diff --git a/src/vs/editor/browser/controller/pointerHandler.ts b/src/vs/editor/browser/controller/pointerHandler.ts index b21e9fb821b..632156865be 100644 --- a/src/vs/editor/browser/controller/pointerHandler.ts +++ b/src/vs/editor/browser/controller/pointerHandler.ts @@ -4,7 +4,6 @@ *--------------------------------------------------------------------------------------------*/ import * as dom from 'vs/base/browser/dom'; -import * as platform from 'vs/base/common/platform'; import { EventType, Gesture, GestureEvent } from 'vs/base/browser/touch'; import { Disposable } from 'vs/base/common/lifecycle'; import { IPointerHandlerHelper, MouseHandler } from 'vs/editor/browser/controller/mouseHandler'; @@ -60,22 +59,32 @@ export class PointerEventHandler extends MouseHandler { event.preventDefault(); this.viewHelper.focusTextArea(); - const target = this._createMouseTarget(new EditorMouseEvent(event, false, this.viewHelper.viewDomNode), false); + this._dispatchGesture(event, /*inSelectionMode*/false); + } + private onChange(event: GestureEvent): void { + if (this._lastPointerType === 'touch') { + this._context.viewModel.viewLayout.deltaScrollNow(-event.translationX, -event.translationY); + } + if (this._lastPointerType === 'pen') { + this._dispatchGesture(event, /*inSelectionMode*/true); + } + } + + private _dispatchGesture(event: GestureEvent, inSelectionMode: boolean): void { + const target = this._createMouseTarget(new EditorMouseEvent(event, false, this.viewHelper.viewDomNode), false); if (target.position) { - // this.viewController.moveTo(target.position); this.viewController.dispatchMouse({ position: target.position, mouseColumn: target.position.column, startedOnLineNumbers: false, revealType: NavigationCommandRevealType.Minimal, mouseDownCount: event.tapCount, - inSelectionMode: false, + inSelectionMode, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, - leftButton: false, middleButton: false, onInjectedText: target.type === MouseTargetType.CONTENT_TEXT && target.detail.injectedText !== null @@ -83,12 +92,6 @@ export class PointerEventHandler extends MouseHandler { } } - private onChange(e: GestureEvent): void { - if (this._lastPointerType === 'touch') { - this._context.viewModel.viewLayout.deltaScrollNow(-e.translationX, -e.translationY); - } - } - protected override _onMouseDown(e: EditorMouseEvent, pointerId: number): void { if ((e.browserEvent as any).pointerType === 'touch') { return; @@ -137,7 +140,7 @@ export class PointerHandler extends Disposable { constructor(context: ViewContext, viewController: ViewController, viewHelper: IPointerHandlerHelper) { super(); - if ((platform.isIOS && BrowserFeatures.pointerEvents)) { + if (BrowserFeatures.pointerEvents) { this.handler = this._register(new PointerEventHandler(context, viewController, viewHelper)); } else if (mainWindow.TouchEvent) { this.handler = this._register(new TouchHandler(context, viewController, viewHelper)); diff --git a/src/vs/editor/browser/controller/textAreaInput.ts b/src/vs/editor/browser/controller/textAreaInput.ts index 950dd87f220..88b4eb324e6 100644 --- a/src/vs/editor/browser/controller/textAreaInput.ts +++ b/src/vs/editor/browser/controller/textAreaInput.ts @@ -746,7 +746,7 @@ export class TextAreaWrapper extends Disposable implements ICompleteTextAreaWrap if (shadowRoot) { return shadowRoot.activeElement === this._actual; } else if (this._actual.isConnected) { - return this._actual.ownerDocument.activeElement === this._actual; + return dom.getActiveElement() === this._actual; } else { return false; } @@ -796,7 +796,7 @@ export class TextAreaWrapper extends Disposable implements ICompleteTextAreaWrap if (shadowRoot) { activeElement = shadowRoot.activeElement; } else { - activeElement = textArea.ownerDocument.activeElement; + activeElement = dom.getActiveElement(); } const activeWindow = dom.getWindow(activeElement); diff --git a/src/vs/editor/browser/view.ts b/src/vs/editor/browser/view.ts index 83c2094484e..6df5d5c6d6f 100644 --- a/src/vs/editor/browser/view.ts +++ b/src/vs/editor/browser/view.ts @@ -713,7 +713,7 @@ class EditorRenderingCoordinator { public static INSTANCE = new EditorRenderingCoordinator(); private _coordinatedRenderings: ICoordinatedRendering[] = []; - private _animationFrameRunner: IDisposable | null = null; + private _animationFrameRunners = new Map(); private constructor() { } @@ -729,23 +729,23 @@ class EditorRenderingCoordinator { this._coordinatedRenderings.splice(renderingIndex, 1); if (this._coordinatedRenderings.length === 0) { - // There are no more renderings to coordinate => cancel animation frame - if (this._animationFrameRunner !== null) { - this._animationFrameRunner.dispose(); - this._animationFrameRunner = null; + // There are no more renderings to coordinate => cancel animation frames + for (const [_, disposable] of this._animationFrameRunners) { + disposable.dispose(); } + this._animationFrameRunners.clear(); } } }; } private _scheduleRender(window: CodeWindow): void { - if (this._animationFrameRunner === null) { + if (!this._animationFrameRunners.has(window)) { const runner = () => { - this._animationFrameRunner = null; + this._animationFrameRunners.delete(window); this._onRenderScheduled(); }; - this._animationFrameRunner = dom.runAtThisOrScheduleAtNextAnimationFrame(window, runner, 100); + this._animationFrameRunners.set(window, dom.runAtThisOrScheduleAtNextAnimationFrame(window, runner, 100)); } } diff --git a/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts b/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts index 986237029eb..554c842d24d 100644 --- a/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts +++ b/src/vs/editor/browser/widget/diffEditor/diffEditor.contribution.ts @@ -280,17 +280,6 @@ export class AccessibleDiffViewerPrev extends Action2 { export function findFocusedDiffEditor(accessor: ServicesAccessor): IDiffEditor | null { const codeEditorService = accessor.get(ICodeEditorService); const diffEditors = codeEditorService.listDiffEditors(); - const activeCodeEditor = codeEditorService.getFocusedCodeEditor() ?? codeEditorService.getActiveCodeEditor(); - if (!activeCodeEditor) { - return null; - } - - for (let i = 0, len = diffEditors.length; i < len; i++) { - const diffEditor = diffEditors[i]; - if (diffEditor.getModifiedEditor().getId() === activeCodeEditor.getId() || diffEditor.getOriginalEditor().getId() === activeCodeEditor.getId()) { - return diffEditor; - } - } const activeElement = getActiveElement(); if (activeElement) { diff --git a/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts index 5817e88059f..3fd6e543a61 100644 --- a/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditor/diffEditorWidget.ts @@ -483,13 +483,13 @@ export class DiffEditorWidget extends DelegatingEditor implements IDiffEditor { return; } - const model = this._diffModel.get()?.model; - if (!model) { return; } + const model = this._diffModel.get(); + if (!model || !model.isDiffUpToDate.get()) { return; } this._editors.modified.executeEdits('diffEditor', [ { range: diff.modified.toExclusiveRange(), - text: model.original.getValueInRange(diff.original.toExclusiveRange()) + text: model.model.original.getValueInRange(diff.original.toExclusiveRange()) } ]); } diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts index fe408e95581..9edc63d335f 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts @@ -92,6 +92,10 @@ export class LinesSliceCharSequence implements ISequence { // don't break between \r and \n return 0; } + if (prevCategory === CharBoundaryCategory.LineBreakLF) { + // prefer the linebreak before the change + return 150; + } let score = 0; if (prevCategory !== nextCategory) { @@ -187,7 +191,7 @@ const score: Record = { [CharBoundaryCategory.WordNumber]: 0, [CharBoundaryCategory.End]: 10, [CharBoundaryCategory.Other]: 2, - [CharBoundaryCategory.Separator]: 3, + [CharBoundaryCategory.Separator]: 30, [CharBoundaryCategory.Space]: 3, [CharBoundaryCategory.LineBreakCR]: 10, [CharBoundaryCategory.LineBreakLF]: 10, diff --git a/src/vs/editor/common/services/semanticTokensProviderStyling.ts b/src/vs/editor/common/services/semanticTokensProviderStyling.ts index e08d06038bb..f248e0e23c2 100644 --- a/src/vs/editor/common/services/semanticTokensProviderStyling.ts +++ b/src/vs/editor/common/services/semanticTokensProviderStyling.ts @@ -105,21 +105,21 @@ export class SemanticTokensProviderStyling { public warnOverlappingSemanticTokens(lineNumber: number, startColumn: number): void { if (!this._hasWarnedOverlappingTokens) { this._hasWarnedOverlappingTokens = true; - console.warn(`Overlapping semantic tokens detected at lineNumber ${lineNumber}, column ${startColumn}`); + this._logService.warn(`Overlapping semantic tokens detected at lineNumber ${lineNumber}, column ${startColumn}`); } } public warnInvalidLengthSemanticTokens(lineNumber: number, startColumn: number): void { if (!this._hasWarnedInvalidLengthTokens) { this._hasWarnedInvalidLengthTokens = true; - console.warn(`Semantic token with invalid length detected at lineNumber ${lineNumber}, column ${startColumn}`); + this._logService.warn(`Semantic token with invalid length detected at lineNumber ${lineNumber}, column ${startColumn}`); } } public warnInvalidEditStart(previousResultId: string | undefined, resultId: string | undefined, editIndex: number, editStart: number, maxExpectedStart: number): void { if (!this._hasWarnedInvalidEditStart) { this._hasWarnedInvalidEditStart = true; - console.warn(`Invalid semantic tokens edit detected (previousResultId: ${previousResultId}, resultId: ${resultId}) at edit #${editIndex}: The provided start offset ${editStart} is outside the previous data (length ${maxExpectedStart}).`); + this._logService.warn(`Invalid semantic tokens edit detected (previousResultId: ${previousResultId}, resultId: ${resultId}) at edit #${editIndex}: The provided start offset ${editStart} is outside the previous data (length ${maxExpectedStart}).`); } } diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index 4e6f4b8650f..ff5f4eef6f6 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -806,7 +806,8 @@ export class ViewModel extends Disposable implements IViewModel { public modifyPosition(position: Position, offset: number): Position { const modelPosition = this.coordinatesConverter.convertViewPositionToModelPosition(position); - return this.model.modifyPosition(modelPosition, offset); + const resultModelPosition = this.model.modifyPosition(modelPosition, offset); + return this.coordinatesConverter.convertModelPositionToViewPosition(resultModelPosition); } public deduceModelPositionRelativeToViewPosition(viewAnchorPosition: Position, deltaOffset: number, lineFeedCnt: number): Position { diff --git a/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts b/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts index 4b74ecd36db..478f3ccd1fc 100644 --- a/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts +++ b/src/vs/editor/contrib/codeAction/browser/lightBulbWidget.ts @@ -175,6 +175,12 @@ export class LightBulbWidget extends Disposable implements IContentWidget { return this.hide(); } + const onlyAIActions = actions.allAIFixes; + const showAiIcon = this._editor.getOption(EditorOption.lightbulb).experimental.showAiIcon; + if (onlyAIActions && showAiIcon === ShowAiIconMode.Off) { + return this.hide(); + } + const model = this._editor.getModel(); if (!model) { return this.hide(); diff --git a/src/vs/editor/contrib/codelens/browser/codelensWidget.css b/src/vs/editor/contrib/codelens/browser/codelensWidget.css index ce61f837ef5..14711df31af 100644 --- a/src/vs/editor/contrib/codelens/browser/codelensWidget.css +++ b/src/vs/editor/contrib/codelens/browser/codelensWidget.css @@ -16,24 +16,24 @@ font-family: var(--vscode-editorCodeLens-fontFamily), var(--vscode-editorCodeLens-fontFamilyDefault); } -.monaco-editor .codelens-decoration>span, -.monaco-editor .codelens-decoration>a { +.monaco-editor .codelens-decoration > span, +.monaco-editor .codelens-decoration > a { user-select: none; -webkit-user-select: none; white-space: nowrap; vertical-align: sub; } -.monaco-editor .codelens-decoration>a { +.monaco-editor .codelens-decoration > a { text-decoration: none; } -.monaco-editor .codelens-decoration>a:hover { +.monaco-editor .codelens-decoration > a:hover { cursor: pointer; color: var(--vscode-editorLink-activeForeground) !important; } -.monaco-editor .codelens-decoration>a:hover .codicon { +.monaco-editor .codelens-decoration > a:hover .codicon { color: var(--vscode-editorLink-activeForeground) !important; } @@ -45,7 +45,7 @@ font-size: var(--vscode-editorCodeLens-fontSize); } -.monaco-editor .codelens-decoration>a:hover .codicon::before { +.monaco-editor .codelens-decoration > a:hover .codicon::before { cursor: pointer; } diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts index 5e245dfb4a2..d7fc9e51eb6 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerWidget.ts @@ -117,9 +117,9 @@ class CloseButton extends Disposable { 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._button.onclick = () => { + this._register(dom.addDisposableListener(this._button, dom.EventType.CLICK, () => { this._onClicked.fire(); - }; + })); } } @@ -455,9 +455,9 @@ export class InsertButton extends Disposable { this._button = dom.append(container, document.createElement('button')); this._button.classList.add('insert-button'); this._button.textContent = 'Insert'; - this._button.onclick = e => { + this._register(dom.addDisposableListener(this._button, dom.EventType.CLICK, () => { this._onClicked.fire(); - }; + })); } public get button(): HTMLElement { diff --git a/src/vs/editor/contrib/format/browser/format.ts b/src/vs/editor/contrib/format/browser/format.ts index 2fef1059ac8..402d15f5643 100644 --- a/src/vs/editor/contrib/format/browser/format.ts +++ b/src/vs/editor/contrib/format/browser/format.ts @@ -69,13 +69,18 @@ export function getRealAndSyntheticDocumentFormattersOrdered( return result; } +export const enum FormattingKind { + File = 1, + Selection = 2 +} + export const enum FormattingMode { Explicit = 1, Silent = 2 } export interface IFormattingEditProviderSelector { - (formatter: T[], document: ITextModel, mode: FormattingMode): Promise; + (formatter: T[], document: ITextModel, mode: FormattingMode, kind: FormattingKind): Promise; } export abstract class FormattingConflicts { @@ -87,13 +92,13 @@ export abstract class FormattingConflicts { return { dispose: remove }; } - static async select(formatter: T[], document: ITextModel, mode: FormattingMode): Promise { + static async select(formatter: T[], document: ITextModel, mode: FormattingMode, kind: FormattingKind): Promise { if (formatter.length === 0) { return undefined; } const selector = Iterable.first(FormattingConflicts._selectors); if (selector) { - return await selector(formatter, document, mode); + return await selector(formatter, document, mode, kind); } return undefined; } @@ -113,7 +118,7 @@ export async function formatDocumentRangesWithSelectedProvider( const { documentRangeFormattingEditProvider: documentRangeFormattingEditProviderRegistry } = accessor.get(ILanguageFeaturesService); const model = isCodeEditor(editorOrModel) ? editorOrModel.getModel() : editorOrModel; const provider = documentRangeFormattingEditProviderRegistry.ordered(model); - const selected = await FormattingConflicts.select(provider, model, mode); + const selected = await FormattingConflicts.select(provider, model, mode, FormattingKind.Selection); if (selected) { progress.report(selected); await instaService.invokeFunction(formatDocumentRangesWithProvider, selected, editorOrModel, rangeOrRanges, token, userGesture); @@ -291,7 +296,7 @@ export async function formatDocumentWithSelectedProvider( const languageFeaturesService = accessor.get(ILanguageFeaturesService); const model = isCodeEditor(editorOrModel) ? editorOrModel.getModel() : editorOrModel; const provider = getRealAndSyntheticDocumentFormattersOrdered(languageFeaturesService.documentFormattingEditProvider, languageFeaturesService.documentRangeFormattingEditProvider, model); - const selected = await FormattingConflicts.select(provider, model, mode); + const selected = await FormattingConflicts.select(provider, model, mode, FormattingKind.File); if (selected) { progress.report(selected); await instaService.invokeFunction(formatDocumentWithProvider, selected, editorOrModel, mode, token, userGesture); diff --git a/src/vs/editor/contrib/gotoError/browser/media/gotoErrorWidget.css b/src/vs/editor/contrib/gotoError/browser/media/gotoErrorWidget.css index 9e52eb6d750..67edd0e78d5 100644 --- a/src/vs/editor/contrib/gotoError/browser/media/gotoErrorWidget.css +++ b/src/vs/editor/contrib/gotoError/browser/media/gotoErrorWidget.css @@ -66,13 +66,10 @@ /** Hack to force underline to show **/ border-bottom: 1px solid transparent; text-underline-position: under; - color: var(--vscode-textLink-foreground); -} - -.monaco-editor .marker-widget .descriptioncontainer .message a.code-link > span { color: var(--vscode-textLink-activeForeground); } .monaco-editor .marker-widget .descriptioncontainer .filename { cursor: pointer; + color: var(--vscode-textLink-activeForeground); } diff --git a/src/vs/editor/contrib/hover/browser/contentHover.ts b/src/vs/editor/contrib/hover/browser/contentHover.ts index 4f9c0ce1997..a33aba3a394 100644 --- a/src/vs/editor/contrib/hover/browser/contentHover.ts +++ b/src/vs/editor/contrib/hover/browser/contentHover.ts @@ -782,9 +782,9 @@ export class ContentHoverWidget extends ResizableContentWidget { this._hover.containerDomNode.focus(); } hoverData.colorPicker?.layout(); - // The aria label overrides the label, so if we add to it, add the contents of the hover - const accessibleViewHint = getHoverAccessibleViewHint(this._configurationService.getValue('accessibility.verbosity.hover') === true && this._accessibilityService.isScreenReaderOptimized(), this._keybindingService.lookupKeybinding('editor.action.accessibleView')?.getAriaLabel() ?? ''); + const hoverFocused = this._hover.containerDomNode.ownerDocument.activeElement === this._hover.containerDomNode; + const accessibleViewHint = hoverFocused && getHoverAccessibleViewHint(this._configurationService.getValue('accessibility.verbosity.hover') === true && this._accessibilityService.isScreenReaderOptimized(), this._keybindingService.lookupKeybinding('editor.action.accessibleView')?.getAriaLabel() ?? ''); if (accessibleViewHint) { this._hover.contentsDomNode.ariaLabel = this._hover.contentsDomNode.textContent + ', ' + accessibleViewHint; } diff --git a/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts b/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts index 4979526e24f..d56720dcebd 100644 --- a/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts +++ b/src/vs/editor/contrib/hover/browser/markerHoverParticipant.ts @@ -192,7 +192,7 @@ export class MarkerHoverParticipant implements IEditorHoverParticipant quickfixPlaceholderElement.textContent = nls.localize('checkingForQuickFixes', "Checking for quick fixes..."), 200)); + const updatePlaceholderDisposable = this.recentMarkerCodeActionsInfo && !this.recentMarkerCodeActionsInfo.hasCodeActions ? Disposable.None : disposableTimeout(() => quickfixPlaceholderElement.textContent = nls.localize('checkingForQuickFixes', "Checking for quick fixes..."), 200, disposables); if (!quickfixPlaceholderElement.textContent) { // Have some content in here to avoid flickering quickfixPlaceholderElement.textContent = String.fromCharCode(0xA0); //   diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts index fab60b557e3..5a1847e81bd 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts @@ -156,6 +156,37 @@ export class InlayHintsController implements IEditorContribution { return; } + if (options.enabled === 'on') { + // different "on" modes: always + this._activeRenderMode = RenderMode.Normal; + } else { + // different "on" modes: offUnlessPressed, or onUnlessPressed + let defaultMode: RenderMode; + let altMode: RenderMode; + if (options.enabled === 'onUnlessPressed') { + defaultMode = RenderMode.Normal; + altMode = RenderMode.Invisible; + } else { + defaultMode = RenderMode.Invisible; + altMode = RenderMode.Normal; + } + this._activeRenderMode = defaultMode; + + this._sessionDisposables.add(ModifierKeyEmitter.getInstance().event(e => { + if (!this._editor.hasModel()) { + return; + } + const newRenderMode = e.altKey && e.ctrlKey && !(e.shiftKey || e.metaKey) ? altMode : defaultMode; + if (newRenderMode !== this._activeRenderMode) { + this._activeRenderMode = newRenderMode; + const model = this._editor.getModel(); + const copies = this._copyInlayHintsWithCurrentAnchor(model); + this._updateHintsDecorators([model.getFullModelRange()], copies); + scheduler.schedule(0); + } + })); + } + // iff possible, quickly update from cache const cached = this._inlayHintsCache.get(model); if (cached) { @@ -226,42 +257,13 @@ export class InlayHintsController implements IEditorContribution { } })); this._sessionDisposables.add(this._editor.onDidChangeModelContent((e) => { + cts?.cancel(); + // update less aggressive when typing const delay = Math.max(scheduler.delay, 1250); scheduler.schedule(delay); })); - if (options.enabled === 'on') { - // different "on" modes: always - this._activeRenderMode = RenderMode.Normal; - } else { - // different "on" modes: offUnlessPressed, or onUnlessPressed - let defaultMode: RenderMode; - let altMode: RenderMode; - if (options.enabled === 'onUnlessPressed') { - defaultMode = RenderMode.Normal; - altMode = RenderMode.Invisible; - } else { - defaultMode = RenderMode.Invisible; - altMode = RenderMode.Normal; - } - this._activeRenderMode = defaultMode; - - this._sessionDisposables.add(ModifierKeyEmitter.getInstance().event(e => { - if (!this._editor.hasModel()) { - return; - } - const newRenderMode = e.altKey && e.ctrlKey && !(e.shiftKey || e.metaKey) ? altMode : defaultMode; - if (newRenderMode !== this._activeRenderMode) { - this._activeRenderMode = newRenderMode; - const model = this._editor.getModel(); - const copies = this._copyInlayHintsWithCurrentAnchor(model); - this._updateHintsDecorators([model.getFullModelRange()], copies); - scheduler.schedule(0); - } - })); - } - // mouse gestures this._sessionDisposables.add(this._installDblClickGesture(() => scheduler.schedule(0))); this._sessionDisposables.add(this._installLinkGesture()); 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 9d36f7ebfd8..64de23fce27 100644 --- a/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts +++ b/src/vs/editor/contrib/multicursor/test/browser/multicursor.test.ts @@ -83,6 +83,8 @@ function fromRange(rng: Range): number[] { } suite('Multicursor selection', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + const serviceCollection = new ServiceCollection(); serviceCollection.set(IStorageService, new InMemoryStorageService()); diff --git a/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts b/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts index 10ad6211d76..72e01d3330a 100644 --- a/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts +++ b/src/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.ts @@ -59,6 +59,11 @@ export class DocumentSemanticTokensFeature extends Disposable { } } }; + modelService.getModels().forEach(model => { + if (isSemanticColoringEnabled(model, themeService, configurationService)) { + register(model); + } + }); this._register(modelService.onModelAdded((model) => { if (isSemanticColoringEnabled(model, themeService, configurationService)) { register(model); diff --git a/src/vs/editor/contrib/suggest/browser/media/suggest.css b/src/vs/editor/contrib/suggest/browser/media/suggest.css index bac06376685..597fa5411b3 100644 --- a/src/vs/editor/contrib/suggest/browser/media/suggest.css +++ b/src/vs/editor/contrib/suggest/browser/media/suggest.css @@ -71,24 +71,24 @@ margin-right: 0.3em; } -.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore, -.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row > .contents > .main > .right > .readMore, +.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label > .contents > .main > .right > .readMore { display: none; } -.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label { +.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover > .contents > .main > .right.can-expand-details > .details-label { width: 100%; } /* Styles for Message element for when widget is loading or is empty */ -.monaco-editor .suggest-widget>.message { +.monaco-editor .suggest-widget > .message { padding-left: 22px; } /** Styles for the list element **/ -.monaco-editor .suggest-widget>.tree { +.monaco-editor .suggest-widget > .tree { height: 100%; width: 100%; } @@ -120,14 +120,14 @@ color: var(--vscode-editorSuggestWidget-selectedIconForeground); } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents { flex: 1; height: 100%; overflow: hidden; padding-left: 2px; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main { display: flex; overflow: hidden; text-overflow: ellipsis; @@ -135,12 +135,12 @@ justify-content: space-between; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left, -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { display: flex; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.focused) > .contents > .main .monaco-icon-label { color: var(--vscode-editorSuggestWidget-foreground); } @@ -148,48 +148,48 @@ font-weight: bold; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-highlightForeground); } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-focusHighlightForeground); } /** ReadMore Icon styles **/ -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close, -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore::before { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .codicon-close, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore::before { color: inherit; opacity: 1; font-size: 14px; cursor: pointer; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .codicon-close { position: absolute; top: 6px; right: 2px; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close:hover, -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:hover { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .codicon-close:hover, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore:hover { opacity: 1; } /** signature, qualifier, type/details opacity **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { opacity: 0.7; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .signature-label { overflow: hidden; text-overflow: ellipsis; opacity: 0.6; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .qualifier-label { margin-left: 12px; opacity: 0.4; font-size: 85%; @@ -201,7 +201,7 @@ /** Type Info and icon next to the label in the focused completion item **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { font-size: 85%; margin-left: 1.1em; overflow: hidden; @@ -209,58 +209,58 @@ white-space: nowrap; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label > .monaco-tokenized-source { display: inline; } /** Details: if using CompletionItem#details, show on focus **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { display: none; } -.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label { +.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused > .contents > .main > .right > .details-label { display: inline; } /** Details: if using CompletionItemLabel#details, always show **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label, -.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label) > .contents > .main > .right > .details-label, +.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label) > .contents > .main > .right > .details-label { display: inline; } /** Ellipsis on hover **/ -.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right.can-expand-details>.details-label { +.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover > .contents > .main > .right.can-expand-details > .details-label { width: calc(100% - 26px); } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left { flex-shrink: 1; flex-grow: 1; overflow: hidden; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .monaco-icon-label { flex-shrink: 0; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label) > .contents > .main > .left > .monaco-icon-label { max-width: 100%; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label > .contents > .main > .left > .monaco-icon-label { flex-shrink: 1; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { overflow: hidden; flex-shrink: 4; max-width: 70%; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore { display: inline-block; position: absolute; right: 10px; @@ -271,23 +271,23 @@ /** Do NOT display ReadMore when docs is side/below **/ -.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row > .contents > .main > .right > .readMore { display: none !important; } /** Do NOT display ReadMore when using plain CompletionItemLabel (details/documentation might not be resolved) **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label > .contents > .main > .right > .readMore { display: none; } /** Focused item can show ReadMore, but can't when docs is side/below **/ -.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label > .contents > .main > .right > .readMore { display: inline-block; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right>.readMore { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused:hover > .contents > .main > .right > .readMore { visibility: visible; } @@ -298,7 +298,7 @@ text-decoration: unset; } -.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container { +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated > .monaco-icon-label-container > .monaco-icon-name-container { text-decoration: line-through; } @@ -372,17 +372,17 @@ display: none; } -.monaco-editor .suggest-details>.monaco-scrollable-element { +.monaco-editor .suggest-details > .monaco-scrollable-element { flex: 1; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body { box-sizing: border-box; height: 100%; width: 100%; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .type { flex: 2; overflow: hidden; text-overflow: ellipsis; @@ -392,55 +392,55 @@ padding: 4px 0 12px 5px; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type.auto-wrap { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .header > .type.auto-wrap { white-space: normal; word-break: break-all; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs { margin: 0; padding: 4px 5px; white-space: pre-wrap; } -.monaco-editor .suggest-details.no-type>.monaco-scrollable-element>.body>.docs { +.monaco-editor .suggest-details.no-type > .monaco-scrollable-element > .body > .docs { margin-right: 24px; overflow: hidden; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs { padding: 0; white-space: initial; min-height: calc(1rem + 8px); } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div, -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>span:not(:empty) { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > div, +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > span:not(:empty) { padding: 4px 5px; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:first-child { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > div > p:first-child { margin-top: 0; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:last-child { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs > div > p:last-child { margin-bottom: 0; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .monaco-tokenized-source { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs .monaco-tokenized-source { white-space: pre; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs .code { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs .code { white-space: pre-wrap; word-wrap: break-word; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .codicon { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > .docs.markdown-docs .codicon { vertical-align: sub; } -.monaco-editor .suggest-details>.monaco-scrollable-element>.body>p:empty { +.monaco-editor .suggest-details > .monaco-scrollable-element > .body > p:empty { display: none; } diff --git a/src/vs/editor/contrib/suggest/browser/suggestController.ts b/src/vs/editor/contrib/suggest/browser/suggestController.ts index d33ce936fe5..1ead2fb39ee 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestController.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestController.ts @@ -353,7 +353,17 @@ export class SuggestController implements IEditorContribution { const scrollState = StableEditorScrollState.capture(this.editor); this.editor.executeEdits( 'suggestController.additionalTextEdits.sync', - item.completion.additionalTextEdits.map(edit => EditOperation.replaceMove(Range.lift(edit.range), edit.text)) + item.completion.additionalTextEdits.map(edit => { + let range = Range.lift(edit.range); + if (range.startLineNumber === item.position.lineNumber && range.startColumn > item.position.column) { + // shift additional edit when it is "after" the completion insertion position + const columnDelta = this.editor.getPosition()!.column - item.position.column; + const startColumnDelta = columnDelta; + const endColumnDelta = Range.spansMultipleLines(range) ? 0 : columnDelta; + range = new Range(range.startLineNumber, range.startColumn + startColumnDelta, range.endLineNumber, range.endColumn + endColumnDelta); + } + return EditOperation.replaceMove(range, edit.text); + }) ); scrollState.restoreRelativeVerticalPositionOfCursor(this.editor); diff --git a/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts b/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts index 0a6faccef30..431f3b4964f 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.ts @@ -45,9 +45,14 @@ const _completionItemColor = new class ColorExtractor { out[0] = item.completion.detail; return true; } - if (typeof item.completion.documentation === 'string') { - const match = ColorExtractor._regexRelaxed.exec(item.completion.documentation); - if (match && (match.index === 0 || match.index + match[0].length === item.completion.documentation.length)) { + + if (item.completion.documentation) { + const value = typeof item.completion.documentation === 'string' + ? item.completion.documentation + : item.completion.documentation.value; + + const match = ColorExtractor._regexRelaxed.exec(value); + if (match && (match.index === 0 || match.index + match[0].length === value.length)) { out[0] = match[0]; return true; } 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 f24030cb93e..381e2663d3e 100644 --- a/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts +++ b/src/vs/editor/contrib/suggest/test/browser/suggestController.test.ts @@ -616,4 +616,56 @@ suite('SuggestController', function () { await p2; }); + + test('Ranges where additionalTextEdits are applied are not appropriate when characters are typed #177591', async function () { + disposables.add(languageFeaturesService.completionProvider.register({ scheme: 'test-ctrl' }, { + _debugDisplayName: 'test', + provideCompletionItems(doc, pos) { + return { + suggestions: [{ + kind: CompletionItemKind.Snippet, + label: 'aaa', + insertText: 'aaa', + range: Range.fromPositions(pos), + additionalTextEdits: [{ + range: Range.fromPositions(pos.delta(0, 10)), + text: 'aaa' + }] + }] + }; + } + })); + + { // PART1 - no typing + editor.setValue(`123456789123456789`); + editor.setSelection(new Selection(1, 1, 1, 1)); + const p1 = Event.toPromise(controller.model.onDidSuggest); + controller.triggerSuggest(); + + const e = await p1; + assert.strictEqual(e.completionModel.items.length, 1); + assert.strictEqual(e.completionModel.items[0].textLabel, 'aaa'); + + controller.acceptSelectedSuggestion(false, false); + + assert.strictEqual(editor.getValue(), 'aaa1234567891aaa23456789'); + } + + { // PART2 - typing + editor.setValue(`123456789123456789`); + editor.setSelection(new Selection(1, 1, 1, 1)); + const p1 = Event.toPromise(controller.model.onDidSuggest); + controller.triggerSuggest(); + + const e = await p1; + assert.strictEqual(e.completionModel.items.length, 1); + assert.strictEqual(e.completionModel.items[0].textLabel, 'aaa'); + + editor.trigger('keyboard', 'type', { text: 'aa' }); + + controller.acceptSelectedSuggestion(false, false); + + assert.strictEqual(editor.getValue(), 'aaa1234567891aaa23456789'); + } + }); }); diff --git a/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts b/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts index 525af0230a0..f7bd8e2eede 100644 --- a/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts +++ b/src/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.ts @@ -253,9 +253,10 @@ function computeOccurencesMultiModel(registry: LanguageFeatureRegistry { +registerModelAndPositionCommand('_executeDocumentHighlights', async (accessor, model, position) => { const languageFeaturesService = accessor.get(ILanguageFeaturesService); - return getOccurrencesAtPosition(languageFeaturesService.documentHighlightProvider, model, position, CancellationToken.None); + const map = await getOccurrencesAtPosition(languageFeaturesService.documentHighlightProvider, model, position, CancellationToken.None); + return map?.get(model.uri); }); class WordHighlighter { diff --git a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts index 8fbc1ec6300..9897d433286 100644 --- a/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts +++ b/src/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.ts @@ -50,6 +50,7 @@ class EditorScopedQuickInputService extends QuickInputService { get onDidLayoutContainer() { return Event.map(editor.onDidLayoutChange, dimension => ({ container: widget.getDomNode(), dimension })); }, get onDidChangeActiveContainer() { return Event.None; }, get onDidAddContainer() { return Event.None; }, + get whenActiveContainerStylesLoaded() { return Promise.resolve(); }, get mainContainerOffset() { return { top: 0, quickPickTop: 0 }; }, get activeContainerOffset() { return { top: 0, quickPickTop: 0 }; }, focus: () => editor.focus() diff --git a/src/vs/editor/standalone/browser/standalone-tokens.css b/src/vs/editor/standalone/browser/standalone-tokens.css index 0df4a9bac81..1fc85078f9e 100644 --- a/src/vs/editor/standalone/browser/standalone-tokens.css +++ b/src/vs/editor/standalone/browser/standalone-tokens.css @@ -37,14 +37,19 @@ clip-path: inset(50%); } -/*.monaco-editor.vs [tabindex="0"]:focus { - outline: 1px solid rgba(0, 122, 204, 0.4); +.monaco-editor, .monaco-diff-editor .synthetic-focus, +.monaco-editor, .monaco-diff-editor [tabindex="0"]:focus, +.monaco-editor, .monaco-diff-editor [tabindex="-1"]:focus, +.monaco-editor, .monaco-diff-editor button:focus, +.monaco-editor, .monaco-diff-editor input[type=button]:focus, +.monaco-editor, .monaco-diff-editor input[type=checkbox]:focus, +.monaco-editor, .monaco-diff-editor input[type=search]:focus, +.monaco-editor, .monaco-diff-editor input[type=text]:focus, +.monaco-editor, .monaco-diff-editor select:focus, +.monaco-editor, .monaco-diff-editor textarea:focus { + outline-width: 1px; + outline-style: solid; outline-offset: -1px; - opacity: 1 !important; + outline-color: var(--vscode-focusBorder); + opacity: 1 } - -.monaco-editor.vs-dark [tabindex="0"]:focus { - outline: 1px solid rgba(14, 99, 156, 0.6); - outline-offset: -1px; - opacity: 1 !important; -}*/ diff --git a/src/vs/editor/standalone/browser/standaloneLayoutService.ts b/src/vs/editor/standalone/browser/standaloneLayoutService.ts index c928577670f..cc946b22b97 100644 --- a/src/vs/editor/standalone/browser/standaloneLayoutService.ts +++ b/src/vs/editor/standalone/browser/standaloneLayoutService.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ 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 { ILayoutService, ILayoutOffsetInfo } from 'vs/platform/layout/browser/layoutService'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { coalesce, firstOrDefault } from 'vs/base/common/arrays'; -import { mainWindow } from 'vs/base/browser/window'; +import { ILayoutOffsetInfo, ILayoutService } from 'vs/platform/layout/browser/layoutService'; class StandaloneLayoutService implements ILayoutService { declare readonly _serviceBrand: undefined; @@ -19,6 +19,7 @@ class StandaloneLayoutService implements ILayoutService { readonly onDidLayoutContainer = Event.None; readonly onDidChangeActiveContainer = Event.None; readonly onDidAddContainer = Event.None; + readonly whenActiveContainerStylesLoaded = Promise.resolve(); get mainContainer(): HTMLElement { return firstOrDefault(this._codeEditorService.listCodeEditors())?.getContainerDomNode() ?? mainWindow.document.body; diff --git a/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts b/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts index 0f602b4e95e..4b515f974b2 100644 --- a/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts +++ b/src/vs/editor/test/browser/viewModel/viewModelImpl.test.ts @@ -355,4 +355,22 @@ suite('ViewModel', () => { } ); }); + + test('issue #193262: Incorrect implementation of modifyPosition', () => { + testViewModel( + [ + 'just some text' + ], + { + wordWrap: 'wordWrapColumn', + wordWrapColumn: 5 + }, + (viewModel, model) => { + assert.deepStrictEqual( + new Position(3, 1), + viewModel.modifyPosition(new Position(3, 2), -1) + ); + } + ); + }); }); diff --git a/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json index ca938c66689..b1de25a5907 100644 --- a/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json @@ -21,8 +21,12 @@ "modifiedRange": "[7,76 -> 7,80]" }, { - "originalRange": "[12,153 -> 12,155 EOL]", - "modifiedRange": "[7,157 -> 8,1 EOL]" + "originalRange": "[12,153 -> 12,153]", + "modifiedRange": "[7,157 -> 7,181]" + }, + { + "originalRange": "[13,1 -> 13,1]", + "modifiedRange": "[8,1 -> 9,1]" }, { "originalRange": "[13,31 -> 13,31]", diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst new file mode 100644 index 00000000000..4e4a1168350 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst @@ -0,0 +1 @@ +function x(alignments: RangeMapping[]): x[] { } diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst new file mode 100644 index 00000000000..3bdfadaa26c --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst @@ -0,0 +1 @@ +function x(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[]): x[] { } diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json new file mode 100644 index 00000000000..3e860d858f8 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "function x(alignments: RangeMapping[]): x[] { }\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "function x(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[]): x[] { }\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,38 -> 1,38]", + "modifiedRange": "[1,38 -> 1,88]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json new file mode 100644 index 00000000000..3e860d858f8 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "function x(alignments: RangeMapping[]): x[] { }\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "function x(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[]): x[] { }\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,38 -> 1,38]", + "modifiedRange": "[1,38 -> 1,88]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts b/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts index 654c1c336e9..99e25133cd8 100644 --- a/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts +++ b/src/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem.ts @@ -93,6 +93,8 @@ export class DropdownWithPrimaryActionViewItem extends BaseActionViewItem { event.stopPropagation(); } })); + + this.updateEnabled(); } override focus(fromRight?: boolean): void { @@ -119,6 +121,11 @@ export class DropdownWithPrimaryActionViewItem extends BaseActionViewItem { } } + protected override updateEnabled(): void { + const disabled = !this.action.enabled; + this.element?.classList.toggle('disabled', disabled); + } + update(dropdownAction: IAction, dropdownMenuActions: IAction[], dropdownIcon?: string): void { this._dropdown.dispose(); this._dropdown = new DropdownMenuActionViewItem(dropdownAction, dropdownMenuActions, this._contextMenuProvider, { diff --git a/src/vs/platform/environment/common/argv.ts b/src/vs/platform/environment/common/argv.ts index f205cc30439..54bd029eddc 100644 --- a/src/vs/platform/environment/common/argv.ts +++ b/src/vs/platform/environment/common/argv.ts @@ -115,6 +115,7 @@ export interface NativeParsedArgs { 'profile'?: string; 'profile-temp'?: boolean; 'disable-chromium-sandbox'?: boolean; + sandbox?: boolean; 'enable-coi'?: boolean; diff --git a/src/vs/platform/environment/common/environmentService.ts b/src/vs/platform/environment/common/environmentService.ts index 6d77e70d6b1..cd55aa9b259 100644 --- a/src/vs/platform/environment/common/environmentService.ts +++ b/src/vs/platform/environment/common/environmentService.ts @@ -14,7 +14,7 @@ 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'; -export const EXTENSION_IDENTIFIER_WITH_LOG_REGEX = /^([^.]+\..+):(.+)$/; +export const EXTENSION_IDENTIFIER_WITH_LOG_REGEX = /^([^.]+\..+)[:=](.+)$/; export interface INativeEnvironmentPaths { diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts index 79046c7fa20..1457aa1ed29 100644 --- a/src/vs/platform/environment/node/argv.ts +++ b/src/vs/platform/environment/node/argv.ts @@ -121,6 +121,7 @@ export const OPTIONS: OptionDescriptions> = { 'inspect-brk-extensions': { type: 'string', allowEmptyValue: true, deprecates: ['debugBrkPluginHost'], args: 'port', cat: 't', description: localize('inspect-brk-extensions', "Allow debugging and profiling of extensions with the extension host being paused after start. Check the developer tools for the connection URI.") }, 'disable-gpu': { type: 'boolean', cat: 't', description: localize('disableGPU', "Disable GPU hardware acceleration.") }, 'disable-chromium-sandbox': { type: 'boolean', cat: 't', description: localize('disableChromiumSandbox', "Use this option only when there is requirement to launch the application as sudo user on Linux or when running as an elevated user in an applocker environment on Windows.") }, + 'sandbox': { type: 'boolean' }, 'ms-enable-electron-run-as-node': { type: 'boolean', global: true }, 'telemetry': { type: 'boolean', cat: 't', description: localize('telemetry', "Shows all telemetry events which VS code collects.") }, diff --git a/src/vs/platform/environment/test/node/argv.test.ts b/src/vs/platform/environment/test/node/argv.test.ts index b0d9a5661f4..e3f75f2cde3 100644 --- a/src/vs/platform/environment/test/node/argv.test.ts +++ b/src/vs/platform/environment/test/node/argv.test.ts @@ -112,13 +112,13 @@ suite('parseArgs', () => { _: string[]; } - const options1: OptionDescriptions = { + const options1 = { 'testcmd': c('A test command', { testArg: o('A test command option'), _: { type: 'string[]' } }), _: { type: 'string[]' } - }; + } as OptionDescriptions; assertParse( options1, ['testcmd', '--testArg=foo'], @@ -142,13 +142,13 @@ suite('parseArgs', () => { _: string[]; } - const options2: OptionDescriptions = { + const options2 = { 'testcmd': c('A test command', { testArg: o('A test command option') }), testX: { type: 'boolean', global: true, description: '' }, _: { type: 'string[]' } - }; + } as OptionDescriptions; assertParse( options2, ['testcmd', '--testArg=foo', '--testX'], diff --git a/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts b/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts index 8994ead0bf4..9e72c1c174a 100644 --- a/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts +++ b/src/vs/platform/extensionManagement/test/node/extensionsScannerService.test.ts @@ -348,6 +348,8 @@ suite('NativeExtensionsScanerService Test', () => { suite('ExtensionScannerInput', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('compare inputs - location', () => { const anInput = (location: URI, mtime: number | undefined) => new ExtensionScannerInput(location, mtime, undefined, undefined, false, undefined, ExtensionType.User, true, true, '1.1.1', undefined, undefined, true, undefined, {}); diff --git a/src/vs/platform/layout/browser/layoutService.ts b/src/vs/platform/layout/browser/layoutService.ts index 3f9b354ae22..6fad206c73e 100644 --- a/src/vs/platform/layout/browser/layoutService.ts +++ b/src/vs/platform/layout/browser/layoutService.ts @@ -94,6 +94,13 @@ export interface ILayoutService { */ readonly activeContainerOffset: ILayoutOffsetInfo; + /** + * A promise resolved when the stylesheets for the active container have been + * loaded. Aux windows load their styles asynchronously, so there may be + * an initial delay before resolution happens. + */ + readonly whenActiveContainerStylesLoaded: Promise; + /** * Focus the primary component of the active container. */ diff --git a/src/vs/platform/terminal/node/terminalEnvironment.ts b/src/vs/platform/terminal/node/terminalEnvironment.ts index fc3dab089b2..066ca8f6bc1 100644 --- a/src/vs/platform/terminal/node/terminalEnvironment.ts +++ b/src/vs/platform/terminal/node/terminalEnvironment.ts @@ -146,10 +146,9 @@ export function getShellIntegrationInjection( } newArgs = [...newArgs]; // Shallow clone the array to avoid setting the default array newArgs[newArgs.length - 1] = format(newArgs[newArgs.length - 1], appRoot, ''); - // TODO: Uncomment when suggestEnabled is ready for use - // if (options.shellIntegration.suggestEnabled) { - // envMixin['VSCODE_SUGGEST'] = '1'; - // } + if (options.shellIntegration.suggestEnabled) { + envMixin['VSCODE_SUGGEST'] = '1'; + } return { newArgs, envMixin }; } logService.warn(`Shell integration cannot be enabled for executable "${shellLaunchConfig.executable}" and args`, shellLaunchConfig.args); @@ -191,10 +190,9 @@ export function getShellIntegrationInjection( if (!newArgs) { return undefined; } - // TODO: Uncomment when suggestEnabled is ready for use - // if (options.shellIntegration.suggestEnabled) { - // envMixin['VSCODE_SUGGEST'] = '1'; - // } + if (options.shellIntegration.suggestEnabled) { + envMixin['VSCODE_SUGGEST'] = '1'; + } newArgs = [...newArgs]; // Shallow clone the array to avoid setting the default array newArgs[newArgs.length - 1] = format(newArgs[newArgs.length - 1], appRoot, ''); return { newArgs, envMixin }; diff --git a/src/vs/platform/theme/common/colorRegistry.ts b/src/vs/platform/theme/common/colorRegistry.ts index 6f35f2c70a6..303c4577fa6 100644 --- a/src/vs/platform/theme/common/colorRegistry.ts +++ b/src/vs/platform/theme/common/colorRegistry.ts @@ -88,9 +88,10 @@ export interface IColorRegistry { * Register a color to the registry. * @param id The color id as used in theme description files * @param defaults The default values + * @param needsTransparency Whether the color requires transparency * @description the description */ - registerColor(id: string, defaults: ColorDefaults, description: string): ColorIdentifier; + registerColor(id: string, defaults: ColorDefaults, description: string, needsTransparency?: boolean): ColorIdentifier; /** * Register a color to the registry. @@ -139,6 +140,10 @@ class ColorRegistry implements IColorRegistry { if (deprecationMessage) { propertySchema.deprecationMessage = deprecationMessage; } + if (needsTransparency) { + propertySchema.pattern = '^#(?:(?[0-9a-fA-f]{3}[0-9a-eA-E])|(?:[0-9a-fA-F]{6}(?:(?![fF]{2})(?:[0-9a-fA-F]{2}))))?$'; + propertySchema.patternErrorMessage = 'This color must be transparent or it will obscure content'; + } this.colorSchema.properties[id] = propertySchema; this.colorReferenceSchema.enum.push(id); this.colorReferenceSchema.enumDescriptions.push(description); @@ -400,7 +405,7 @@ export const editorInlayHintParameterBackground = registerColor('editorInlayHint */ export const editorLightBulbForeground = registerColor('editorLightBulb.foreground', { dark: '#FFCC00', light: '#DDB100', hcDark: '#FFCC00', hcLight: '#007ACC' }, nls.localize('editorLightBulbForeground', "The color used for the lightbulb actions icon.")); export const editorLightBulbAutoFixForeground = registerColor('editorLightBulbAutoFix.foreground', { dark: '#75BEFF', light: '#007ACC', hcDark: '#75BEFF', hcLight: '#007ACC' }, nls.localize('editorLightBulbAutoFixForeground', "The color used for the lightbulb auto fix actions icon.")); -export const editorLightBulbAiForeground = registerColor('editorLightBulbAi.foreground', { dark: darken(iconForeground, 0.4), light: lighten(iconForeground, 1.7), hcDark: iconForeground, hcLight: iconForeground }, nls.localize('editorLightBulbAiForeground', "The color used for the lightbulb AI icon.")); +export const editorLightBulbAiForeground = registerColor('editorLightBulbAi.foreground', { dark: darken(iconForeground, 0.4), light: lighten(iconForeground, 1), hcDark: iconForeground, hcLight: iconForeground }, nls.localize('editorLightBulbAiForeground', "The color used for the lightbulb AI icon.")); /** * Diff Editor Colors diff --git a/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts b/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts index ef65f7c57e5..eeeb2486c46 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 * as assert from 'assert'; -import { IFileService, FileChangeType, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, FileType, FileSystemProviderCapabilities, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileOpenOptions, IFileSystemProviderWithFileReadStreamCapability, IFileReadStreamOptions } from 'vs/platform/files/common/files'; -import { FileService } from 'vs/platform/files/common/fileService'; -import { NullLogService } from 'vs/platform/log/common/log'; -import { Schemas } from 'vs/base/common/network'; -import { URI } from 'vs/base/common/uri'; -import { FileUserDataProvider } from 'vs/platform/userData/common/fileUserDataProvider'; -import { dirname, isEqual, joinPath } from 'vs/base/common/resources'; import { VSBuffer } from 'vs/base/common/buffer'; -import { DisposableStore, IDisposable, Disposable } from 'vs/base/common/lifecycle'; -import { Emitter, Event } from 'vs/base/common/event'; -import { InMemoryFileSystemProvider } from 'vs/platform/files/common/inMemoryFilesystemProvider'; -import { AbstractNativeEnvironmentService } from 'vs/platform/environment/common/environmentService'; -import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import product from 'vs/platform/product/common/product'; -import { IUserDataProfilesService, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; -import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; -import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; import { CancellationToken } from 'vs/base/common/cancellation'; +import { 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'; const ROOT = URI.file('tests').with({ scheme: 'vscode-tests' }); @@ -315,7 +315,7 @@ class TestFileSystemProvider implements IFileSystemProviderWithFileReadWriteCapa suite('FileUserDataProvider - Watching', () => { let testObject: FileUserDataProvider; - const disposables = new DisposableStore(); + const disposables = ensureNoDisposablesAreLeakedInTestSuite(); const rootFileResource = joinPath(ROOT, 'User'); const rootUserDataResource = rootFileResource.with({ scheme: Schemas.vscodeUserData }); @@ -332,8 +332,6 @@ suite('FileUserDataProvider - Watching', () => { testObject = disposables.add(new FileUserDataProvider(rootFileResource.scheme, new TestFileSystemProvider(fileEventEmitter.event), Schemas.vscodeUserData, userDataProfilesService, uriIdentityService, new NullLogService())); }); - teardown(() => disposables.clear()); - test('file added change event', done => { disposables.add(testObject.watch(rootUserDataResource, { excludes: [], recursive: false })); const expected = joinPath(rootUserDataResource, 'settings.json'); @@ -427,7 +425,7 @@ suite('FileUserDataProvider - Watching', () => { test('event is not triggered if not watched', async () => { const target = joinPath(rootFileResource, 'settings.json'); let triggered = false; - testObject.onDidChangeFile(() => triggered = true); + disposables.add(testObject.onDidChangeFile(() => triggered = true)); fileEventEmitter.fire([{ resource: target, type: FileChangeType.DELETED @@ -441,7 +439,7 @@ suite('FileUserDataProvider - Watching', () => { disposables.add(testObject.watch(rootUserDataResource, { excludes: [], recursive: false })); const target = joinPath(dirname(rootFileResource), 'settings.json'); let triggered = false; - testObject.onDidChangeFile(() => triggered = true); + disposables.add(testObject.onDidChangeFile(() => triggered = true)); fileEventEmitter.fire([{ resource: target, type: FileChangeType.DELETED diff --git a/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts b/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts index bc90fb28b24..db83d62e163 100644 --- a/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts +++ b/src/vs/platform/userDataSync/test/common/userDataSyncStoreService.test.ts @@ -417,6 +417,9 @@ suite('UserDataSyncRequestsSession', () => { async loadCertificates() { return []; } }; + + ensureNoDisposablesAreLeakedInTestSuite(); + test('too many requests are thrown when limit exceeded', async () => { const testObject = new RequestsSession(1, 500, requestService, new NullLogService()); await testObject.request('url', {}, CancellationToken.None); diff --git a/src/vs/platform/windows/electron-main/windowImpl.ts b/src/vs/platform/windows/electron-main/windowImpl.ts index b68fb6ebef1..36f9a65833f 100644 --- a/src/vs/platform/windows/electron-main/windowImpl.ts +++ b/src/vs/platform/windows/electron-main/windowImpl.ts @@ -839,7 +839,7 @@ export class CodeWindow extends BaseWindow implements ICodeWindow { private async destroyWindow(reopen: boolean, skipRestoreEditors: boolean): Promise { const workspace = this._config?.workspace; - // check to discard editor state first + // check to discard editor state first if (skipRestoreEditors && workspace) { try { const workspaceStorage = this.storageMainService.workspaceStorage(workspace); @@ -854,37 +854,41 @@ export class CodeWindow extends BaseWindow implements ICodeWindow { // 'close' event will not be fired on destroy(), so signal crash via explicit event this._onDidDestroy.fire(); - // make sure to destroy the window as its renderer process is gone - this._win?.destroy(); + try { + // ask the windows service to open a new fresh window if specified + if (reopen && this._config) { - // ask the windows service to open a new fresh window if specified - if (reopen && this._config) { + // We have to reconstruct a openable from the current workspace + let uriToOpen: IWorkspaceToOpen | IFolderToOpen | undefined = undefined; + let forceEmpty = undefined; + if (isSingleFolderWorkspaceIdentifier(workspace)) { + uriToOpen = { folderUri: workspace.uri }; + } else if (isWorkspaceIdentifier(workspace)) { + uriToOpen = { workspaceUri: workspace.configPath }; + } else { + forceEmpty = true; + } - // We have to reconstruct a openable from the current workspace - let uriToOpen: IWorkspaceToOpen | IFolderToOpen | undefined = undefined; - let forceEmpty = undefined; - if (isSingleFolderWorkspaceIdentifier(workspace)) { - uriToOpen = { folderUri: workspace.uri }; - } else if (isWorkspaceIdentifier(workspace)) { - uriToOpen = { workspaceUri: workspace.configPath }; - } else { - forceEmpty = true; + // Delegate to windows service + const window = firstOrDefault(await this.windowsMainService.open({ + context: OpenContext.API, + userEnv: this._config.userEnv, + cli: { + ...this.environmentMainService.args, + _: [] // we pass in the workspace to open explicitly via `urisToOpen` + }, + urisToOpen: uriToOpen ? [uriToOpen] : undefined, + forceEmpty, + forceNewWindow: true, + remoteAuthority: this.remoteAuthority + })); + window?.focus(); } - - // Delegate to windows service - const window = firstOrDefault(await this.windowsMainService.open({ - context: OpenContext.API, - userEnv: this._config.userEnv, - cli: { - ...this.environmentMainService.args, - _: [] // we pass in the workspace to open explicitly via `urisToOpen` - }, - urisToOpen: uriToOpen ? [uriToOpen] : undefined, - forceEmpty, - forceNewWindow: true, - remoteAuthority: this.remoteAuthority - })); - window?.focus(); + } finally { + // make sure to destroy the window as its renderer process is gone. do this + // after the code for reopening the window, to prevent the entire application + // from quitting when the last window closes as a result. + this._win?.destroy(); } } diff --git a/src/vs/platform/windows/electron-main/windowsMainService.ts b/src/vs/platform/windows/electron-main/windowsMainService.ts index 576725137cd..3053b0782ee 100644 --- a/src/vs/platform/windows/electron-main/windowsMainService.ts +++ b/src/vs/platform/windows/electron-main/windowsMainService.ts @@ -1495,7 +1495,7 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic const disposables = new DisposableStore(); disposables.add(createdWindow.onDidSignalReady(() => this._onDidSignalReadyWindow.fire(createdWindow))); disposables.add(Event.once(createdWindow.onDidClose)(() => this.onWindowClosed(createdWindow, disposables))); - disposables.add(Event.once(createdWindow.onDidDestroy)(() => this._onDidDestroyWindow.fire(createdWindow))); + disposables.add(Event.once(createdWindow.onDidDestroy)(() => this.onWindowDestroyed(createdWindow))); disposables.add(createdWindow.onDidMaximize(() => this._onDidMaximizeWindow.fire(createdWindow))); disposables.add(createdWindow.onDidUnmaximize(() => this._onDidUnmaximizeWindow.fire(createdWindow))); disposables.add(createdWindow.onDidTriggerSystemContextMenu(({ x, y }) => this._onDidTriggerSystemContextMenu.fire({ window: createdWindow, x, y }))); @@ -1627,6 +1627,15 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic disposables.dispose(); } + private onWindowDestroyed(window: ICodeWindow): void { + + // Remove from our list so that Electron can clean it up + this.windows.delete(window.id); + + // Emit + this._onDidDestroyWindow.fire(window); + } + getFocusedWindow(): ICodeWindow | undefined { const window = BrowserWindow.getFocusedWindow(); if (window) { diff --git a/src/vs/workbench/api/browser/mainThreadChat.ts b/src/vs/workbench/api/browser/mainThreadChat.ts index 476bf6da65c..a67f5d4b250 100644 --- a/src/vs/workbench/api/browser/mainThreadChat.ts +++ b/src/vs/workbench/api/browser/mainThreadChat.ts @@ -28,12 +28,6 @@ export class MainThreadChat extends Disposable implements MainThreadChatShape { ) { super(); this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostChat); - - this._register(this._chatService.onDidPerformUserAction(e => { - if (!e.agentId) { - this._proxy.$onDidPerformUserAction(e); - } - })); } $transferChatSession(sessionId: number, toWorkspace: UriComponents): void { diff --git a/src/vs/workbench/api/browser/mainThreadEditor.ts b/src/vs/workbench/api/browser/mainThreadEditor.ts index 449791c204b..f6a2d942c0d 100644 --- a/src/vs/workbench/api/browser/mainThreadEditor.ts +++ b/src/vs/workbench/api/browser/mainThreadEditor.ts @@ -21,6 +21,7 @@ import { CodeEditorStateFlag, EditorState } from 'vs/editor/contrib/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'; export interface IFocusTracker { onGainedFocus(): void; @@ -530,16 +531,11 @@ export class MainThreadTextEditor { return false; } - // cancel previous snippet mode - // snippetController.leaveSnippet(); - - // set selection, focus editor - const selections = ranges.map(r => new Selection(r.startLineNumber, r.startColumn, r.endLineNumber, r.endColumn)); - this._codeEditor.setSelections(selections); this._codeEditor.focus(); - // make modifications - snippetController.insert(template, { + // make modifications as snippet edit + const edits: ISnippetEdit[] = ranges.map(range => ({ range: Range.lift(range), template })); + snippetController.apply(edits, { overwriteBefore: 0, overwriteAfter: 0, undoStopBefore: opts.undoStopBefore, undoStopAfter: opts.undoStopAfter, clipboardText diff --git a/src/vs/workbench/api/browser/mainThreadSCM.ts b/src/vs/workbench/api/browser/mainThreadSCM.ts index 25ec522a3a1..854c872257a 100644 --- a/src/vs/workbench/api/browser/mainThreadSCM.ts +++ b/src/vs/workbench/api/browser/mainThreadSCM.ts @@ -7,7 +7,7 @@ import { URI, UriComponents } from 'vs/base/common/uri'; import { Event, Emitter } from 'vs/base/common/event'; import { IDisposable, DisposableStore, combinedDisposable, dispose } 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, SCMInputActionButtonDto } from '../common/extHost.protocol'; +import { ExtHostContext, MainThreadSCMShape, ExtHostSCMShape, SCMProviderFeatures, SCMRawResourceSplices, SCMGroupFeatures, MainContext, SCMHistoryItemGroupDto } 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'; @@ -22,19 +22,6 @@ import { Codicon } from 'vs/base/common/codicons'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { basename } from 'vs/base/common/resources'; -function getSCMInputBoxActionButtonIcon(actionButton: SCMInputActionButtonDto): URI | { light: URI; dark: URI } | ThemeIcon | undefined { - if (!actionButton.icon) { - return undefined; - } else if (URI.isUri(actionButton.icon)) { - return URI.revive(actionButton.icon); - } else if (ThemeIcon.isThemeIcon(actionButton.icon)) { - return actionButton.icon; - } else { - const icon = actionButton.icon as { light: UriComponents; dark: UriComponents }; - return { light: URI.revive(icon.light), dark: URI.revive(icon.dark) }; - } -} - function getIconFromIconDto(iconDto?: UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon): URI | { light: URI; dark: URI } | ThemeIcon | undefined { if (iconDto === undefined) { return undefined; @@ -623,16 +610,6 @@ export class MainThreadSCM implements MainThreadSCMShape { repository.input.visible = visible; } - $setInputBoxActionButton(sourceControlHandle: number, actionButton?: SCMInputActionButtonDto | null | undefined): void { - const repository = this._repositories.get(sourceControlHandle); - - if (!repository) { - return; - } - - repository.input.actionButton = actionButton ? { ...actionButton, icon: getSCMInputBoxActionButtonIcon(actionButton) } : undefined; - } - $showValidationMessage(sourceControlHandle: number, message: string | IMarkdownString, type: InputValidationType) { const repository = this._repositories.get(sourceControlHandle); if (!repository) { diff --git a/src/vs/workbench/api/browser/mainThreadTesting.ts b/src/vs/workbench/api/browser/mainThreadTesting.ts index a7cf4ecca77..d6babee621e 100644 --- a/src/vs/workbench/api/browser/mainThreadTesting.ts +++ b/src/vs/workbench/api/browser/mainThreadTesting.ts @@ -11,6 +11,7 @@ import { ISettableObservable } from 'vs/base/common/observable'; import { WellDefinedPrefixTree } from 'vs/base/common/prefixTree'; import { URI } from 'vs/base/common/uri'; import { Range } from 'vs/editor/common/core/range'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { MutableObservableValue } from 'vs/workbench/contrib/testing/common/observableValue'; import { TestCoverage } from 'vs/workbench/contrib/testing/common/testCoverage'; import { TestId } from 'vs/workbench/contrib/testing/common/testId'; @@ -35,6 +36,7 @@ export class MainThreadTesting extends Disposable implements MainThreadTestingSh constructor( extHostContext: IExtHostContext, + @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, @ITestService private readonly testService: ITestService, @ITestProfileService private readonly testProfiles: ITestProfileService, @ITestResultService private readonly resultService: ITestResultService, @@ -118,7 +120,8 @@ export class MainThreadTesting extends Disposable implements MainThreadTestingSh * @inheritdoc */ $addTestsToRun(controllerId: string, runId: string, tests: ITestItem.Serialized[]): void { - this.withLiveRun(runId, r => r.addTestChainToRun(controllerId, tests.map(ITestItem.deserialize))); + this.withLiveRun(runId, r => r.addTestChainToRun(controllerId, + tests.map(t => ITestItem.deserialize(this.uriIdentityService, t)))); } /** @@ -197,7 +200,7 @@ export class MainThreadTesting extends Disposable implements MainThreadTestingSh const r = this.resultService.getResult(runId); if (r && r instanceof LiveTestResult) { for (const message of messages) { - r.appendMessage(testId, taskId, ITestMessage.deserialize(message)); + r.appendMessage(testId, taskId, ITestMessage.deserialize(this.uriIdentityService, message)); } } } @@ -277,7 +280,8 @@ export class MainThreadTesting extends Disposable implements MainThreadTestingSh * @inheritdoc */ public $publishDiff(controllerId: string, diff: TestsDiffOp.Serialized[]): void { - this.testService.publishDiff(controllerId, diff.map(TestsDiffOp.deserialize)); + this.testService.publishDiff(controllerId, + diff.map(d => TestsDiffOp.deserialize(this.uriIdentityService, d))); } public async $runTests(req: ResolvedTestRunRequest, token: CancellationToken): Promise { diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index b3546f88c2b..dedd24fa4bb 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -194,7 +194,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I const extHostShare = rpcProtocol.set(ExtHostContext.ExtHostShare, new ExtHostShare(rpcProtocol, uriTransformer)); const extHostComment = rpcProtocol.set(ExtHostContext.ExtHostComments, createExtHostComments(rpcProtocol, extHostCommands, extHostDocuments)); const extHostProgress = rpcProtocol.set(ExtHostContext.ExtHostProgress, new ExtHostProgress(rpcProtocol.getProxy(MainContext.MainThreadProgress))); - const extHostLabelService = rpcProtocol.set(ExtHostContext.ExtHosLabelService, new ExtHostLabelService(rpcProtocol)); + const extHostLabelService = rpcProtocol.set(ExtHostContext.ExtHostLabelService, new ExtHostLabelService(rpcProtocol)); const extHostTheming = rpcProtocol.set(ExtHostContext.ExtHostTheming, new ExtHostTheming(rpcProtocol)); const extHostAuthentication = rpcProtocol.set(ExtHostContext.ExtHostAuthentication, new ExtHostAuthentication(rpcProtocol)); const extHostTimeline = rpcProtocol.set(ExtHostContext.ExtHostTimeline, new ExtHostTimeline(rpcProtocol, extHostCommands)); @@ -1334,10 +1334,6 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I checkProposedApiEnabled(extension, 'interactive'); return extHostChat.sendInteractiveRequestToProvider(providerId, message); }, - get onDidPerformUserAction() { - checkProposedApiEnabled(extension, 'interactiveUserActions'); - return extHostChat.onDidPerformUserAction; - }, transferChatSession(session: vscode.InteractiveSession, toWorkspace: vscode.Uri) { checkProposedApiEnabled(extension, 'interactive'); return extHostChat.transferChatSession(session, toWorkspace); @@ -1609,7 +1605,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I LogLevel: LogLevel, EditSessionIdentityMatch: EditSessionIdentityMatch, InteractiveSessionVoteDirection: extHostTypes.InteractiveSessionVoteDirection, - InteractiveSessionCopyKind: extHostTypes.InteractiveSessionCopyKind, + ChatAgentCopyKind: extHostTypes.ChatAgentCopyKind, InteractiveEditorResponseFeedbackKind: extHostTypes.InteractiveEditorResponseFeedbackKind, StackFrameFocus: extHostTypes.StackFrameFocus, ThreadFocus: extHostTypes.ThreadFocus, diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 391234eac91..bb3e2374f88 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -1287,7 +1287,6 @@ export interface ExtHostChatShape { $provideWelcomeMessage(handle: number, token: CancellationToken): Promise<(string | IMarkdownString | IChatReplyFollowup[])[] | undefined>; $provideSampleQuestions(handle: number, token: CancellationToken): Promise; $releaseSession(sessionId: number): void; - $onDidPerformUserAction(event: IChatUserActionEvent): Promise; } export interface ExtHostUrlsShape { @@ -1422,12 +1421,6 @@ export interface SCMActionButtonDto { enabled: boolean; } -export interface SCMInputActionButtonDto { - command: ICommandDto; - icon?: UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon; - enabled: boolean; -} - export interface SCMGroupFeatures { hideWhenEmpty?: boolean; } @@ -1497,7 +1490,6 @@ export interface MainThreadSCMShape extends IDisposable { $setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void; $setInputBoxEnablement(sourceControlHandle: number, enabled: boolean): void; $setInputBoxVisibility(sourceControlHandle: number, visible: boolean): void; - $setInputBoxActionButton(sourceControlHandle: number, actionButton?: SCMInputActionButtonDto | null): void; $showValidationMessage(sourceControlHandle: number, message: string | IMarkdownString, type: InputValidationType): void; $setValidationProviderIsEnabled(sourceControlHandle: number, enabled: boolean): void; @@ -2834,7 +2826,7 @@ export const ExtHostContext = { ExtHostUriOpeners: createProxyIdentifier('ExtHostUriOpeners'), ExtHostProfileContentHandlers: createProxyIdentifier('ExtHostProfileContentHandlers'), ExtHostOutputService: createProxyIdentifier('ExtHostOutputService'), - ExtHosLabelService: createProxyIdentifier('ExtHostLabelService'), + ExtHostLabelService: createProxyIdentifier('ExtHostLabelService'), ExtHostNotebook: createProxyIdentifier('ExtHostNotebook'), ExtHostNotebookDocuments: createProxyIdentifier('ExtHostNotebookDocuments'), ExtHostNotebookEditors: createProxyIdentifier('ExtHostNotebookEditors'), diff --git a/src/vs/workbench/api/common/extHostChat.ts b/src/vs/workbench/api/common/extHostChat.ts index 870c8a78848..74935c0e51f 100644 --- a/src/vs/workbench/api/common/extHostChat.ts +++ b/src/vs/workbench/api/common/extHostChat.ts @@ -4,14 +4,13 @@ *--------------------------------------------------------------------------------------------*/ import { CancellationToken } from 'vs/base/common/cancellation'; -import { Emitter } from 'vs/base/common/event'; import { IMarkdownString } from 'vs/base/common/htmlContent'; import { Iterable } from 'vs/base/common/iterator'; import { toDisposable } from 'vs/base/common/lifecycle'; import { IRelaxedExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { ExtHostChatShape, IChatDto, IMainContext, MainContext, MainThreadChatShape } from 'vs/workbench/api/common/extHost.protocol'; import * as typeConvert from 'vs/workbench/api/common/extHostTypeConverters'; -import { IChatReplyFollowup, IChatUserActionEvent } from 'vs/workbench/contrib/chat/common/chatService'; +import { IChatReplyFollowup } from 'vs/workbench/contrib/chat/common/chatService'; import type * as vscode from 'vscode'; class ChatProviderWrapper { @@ -33,9 +32,6 @@ export class ExtHostChat implements ExtHostChatShape { private readonly _chatSessions = new Map(); - private readonly _onDidPerformUserAction = new Emitter(); - public readonly onDidPerformUserAction = this._onDidPerformUserAction.event; - private readonly _proxy: MainThreadChatShape; constructor( @@ -140,9 +136,5 @@ export class ExtHostChat implements ExtHostChatShape { this._chatSessions.delete(sessionId); } - async $onDidPerformUserAction(event: IChatUserActionEvent): Promise { - this._onDidPerformUserAction.fire(event as any); - } - //#endregion } diff --git a/src/vs/workbench/api/common/extHostLanguageFeatures.ts b/src/vs/workbench/api/common/extHostLanguageFeatures.ts index 9093f5a90fb..3190f3eed84 100644 --- a/src/vs/workbench/api/common/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/common/extHostLanguageFeatures.ts @@ -34,7 +34,7 @@ import { StopWatch } from 'vs/base/common/stopwatch'; import { isCancellationError, NotImplementedError } from 'vs/base/common/errors'; import { raceCancellationError } from 'vs/base/common/async'; import { isProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions'; -import { IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; +import { ExtHostTelemetry, IExtHostTelemetry } from 'vs/workbench/api/common/extHostTelemetry'; import { localize } from 'vs/nls'; import { IAutoClosingPairConditional } from 'vs/editor/common/languages/languageConfiguration'; @@ -104,15 +104,16 @@ class DocumentSymbolAdapter { class CodeLensAdapter { - private static _badCmd: vscode.Command = { command: 'missing', title: '!!MISSING: command!!' }; - private readonly _cache = new Cache('CodeLens'); private readonly _disposables = new Map(); constructor( private readonly _documents: ExtHostDocuments, private readonly _commands: CommandsConverter, - private readonly _provider: vscode.CodeLensProvider + private readonly _provider: vscode.CodeLensProvider, + private readonly _extension: IExtensionDescription, + private readonly _extTelemetry: ExtHostTelemetry, + private readonly _logService: ILogService, ) { } async provideCodeLenses(resource: URI, token: CancellationToken): Promise { @@ -164,7 +165,15 @@ class CodeLensAdapter { // disposed in the meantime return undefined; } - symbol.command = this._commands.toInternal(resolvedLens.command ?? CodeLensAdapter._badCmd, disposables); + + if (!resolvedLens.command) { + const error = new Error('INVALID code lens resolved, lacks command: ' + this._extension.identifier.value); + this._extTelemetry.onExtensionError(this._extension.identifier, error); + this._logService.error(error); + return undefined; + } + + symbol.command = this._commands.toInternal(resolvedLens.command, disposables); return symbol; } @@ -1462,17 +1471,26 @@ class InlayHintsAdapter { if (typeof hint.label === 'string') { result.label = hint.label; } else { - result.label = hint.label.map(part => { - const result: languages.InlayHintLabelPart = { label: part.value }; - result.tooltip = typeConvert.MarkdownString.fromStrict(part.tooltip); + const parts: languages.InlayHintLabelPart[] = []; + result.label = parts; + + for (const part of hint.label) { + if (!part.value) { + console.warn('INVALID inlay hint, empty label part', this._extension.identifier.value); + continue; + } + const part2: languages.InlayHintLabelPart = { + label: part.value, + tooltip: typeConvert.MarkdownString.fromStrict(part.tooltip) + }; if (Location.isLocation(part.location)) { - result.location = typeConvert.location.from(part.location); + part2.location = typeConvert.location.from(part.location); } if (part.command) { - result.command = this._commands.toInternal(part.command, disposables); + part2.command = this._commands.toInternal(part.command, disposables); } - return result; - }); + parts.push(part2); + } } return result; } @@ -1997,7 +2015,7 @@ export class ExtHostLanguageFeatures implements extHostProtocol.ExtHostLanguageF const handle = this._nextHandle(); const eventHandle = typeof provider.onDidChangeCodeLenses === 'function' ? this._nextHandle() : undefined; - this._adapter.set(handle, new AdapterData(new CodeLensAdapter(this._documents, this._commands.converter, provider), extension)); + this._adapter.set(handle, new AdapterData(new CodeLensAdapter(this._documents, this._commands.converter, provider, extension, this._extensionTelemetry, this._logService), extension)); this._proxy.$registerCodeLensSupport(handle, this._transformDocumentSelector(selector, extension), eventHandle); let result = this._createDisposable(handle); diff --git a/src/vs/workbench/api/common/extHostSCM.ts b/src/vs/workbench/api/common/extHostSCM.ts index e51541a30fa..74372613449 100644 --- a/src/vs/workbench/api/common/extHostSCM.ts +++ b/src/vs/workbench/api/common/extHostSCM.ts @@ -58,19 +58,6 @@ function getIconResource(decorations?: vscode.SourceControlResourceThemableDecor } } -function getInputBoxActionButtonIcon(actionButton?: vscode.SourceControlInputBoxActionButton): UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon | undefined { - if (!actionButton?.icon) { - return undefined; - } else if (URI.isUri(actionButton.icon)) { - return actionButton.icon; - } else if (ThemeIcon.isThemeIcon(actionButton.icon)) { - return actionButton.icon; - } else { - const icon = actionButton.icon as { light: URI; dark: URI }; - return { light: icon.light, dark: icon.dark }; - } -} - function getHistoryItemIconDto(historyItem: vscode.SourceControlHistoryItem): UriComponents | { light: UriComponents; dark: UriComponents } | ThemeIcon | undefined { if (!historyItem.icon) { return undefined; @@ -331,36 +318,13 @@ export class ExtHostSCMInputBox implements vscode.SourceControlInputBox { this.#proxy.$setInputBoxVisibility(this._sourceControlHandle, visible); } - private _actionButton: vscode.SourceControlInputBoxActionButton | undefined; - private _actionButtonDisposables = new MutableDisposable(); - - get actionButton(): vscode.SourceControlInputBoxActionButton | undefined { - checkProposedApiEnabled(this._extension, 'scmInputBoxActionButton'); - return this._actionButton; - } - - set actionButton(actionButton: vscode.SourceControlInputBoxActionButton | undefined) { - checkProposedApiEnabled(this._extension, 'scmInputBoxActionButton'); - this._actionButtonDisposables.value = new DisposableStore(); - - this._actionButton = actionButton; - - const internal = actionButton !== undefined ? - { - command: this._commands.converter.toInternal(actionButton.command, this._actionButtonDisposables.value), - icon: getInputBoxActionButtonIcon(actionButton), - enabled: actionButton.enabled - } : undefined; - this.#proxy.$setInputBoxActionButton(this._sourceControlHandle, internal ?? null); - } - get document(): vscode.TextDocument { checkProposedApiEnabled(this._extension, 'scmTextDocument'); return this.#extHostDocuments.getDocument(this._documentUri); } - constructor(private _extension: IExtensionDescription, private _commands: ExtHostCommands, _extHostDocuments: ExtHostDocuments, proxy: MainThreadSCMShape, private _sourceControlHandle: number, private _documentUri: URI) { + constructor(private _extension: IExtensionDescription, _extHostDocuments: ExtHostDocuments, proxy: MainThreadSCMShape, private _sourceControlHandle: number, private _documentUri: URI) { this.#extHostDocuments = _extHostDocuments; this.#proxy = proxy; } @@ -702,7 +666,7 @@ class ExtHostSourceControl implements vscode.SourceControl { query: _rootUri ? `rootUri=${encodeURIComponent(_rootUri.toString())}` : undefined }); - this._inputBox = new ExtHostSCMInputBox(_extension, _commands, _extHostDocuments, this.#proxy, this.handle, inputBoxDocumentUri); + this._inputBox = new ExtHostSCMInputBox(_extension, _extHostDocuments, this.#proxy, this.handle, inputBoxDocumentUri); this.#proxy.$registerSourceControl(this.handle, _id, _label, _rootUri, inputBoxDocumentUri); } diff --git a/src/vs/workbench/api/common/extHostTesting.ts b/src/vs/workbench/api/common/extHostTesting.ts index 71ff7a7c521..b84fb025706 100644 --- a/src/vs/workbench/api/common/extHostTesting.ts +++ b/src/vs/workbench/api/common/extHostTesting.ts @@ -318,7 +318,7 @@ export class ExtHostTesting extends Disposable implements ExtHostTestingShape { * tests change. */ public $acceptDiff(diff: TestsDiffOp.Serialized[]): void { - this.observer.applyDiff(diff.map(TestsDiffOp.deserialize)); + this.observer.applyDiff(diff.map(d => TestsDiffOp.deserialize({ asCanonicalUri: u => u }, d))); } /** @@ -1006,7 +1006,9 @@ class TestObservers { tests: MirroredTestCollection; }; - constructor(private readonly proxy: MainThreadTestingShape) { + constructor( + private readonly proxy: MainThreadTestingShape, + ) { } public checkout(): vscode.TestObserver { @@ -1044,7 +1046,7 @@ class TestObservers { } private createObserverData() { - const tests = new MirroredTestCollection(); + const tests = new MirroredTestCollection({ asCanonicalUri: u => u }); this.proxy.$subscribeToDiffs(); return { observers: 0, tests, }; } diff --git a/src/vs/workbench/api/common/extHostTreeViews.ts b/src/vs/workbench/api/common/extHostTreeViews.ts index 51d394e431d..2ea75f8b775 100644 --- a/src/vs/workbench/api/common/extHostTreeViews.ts +++ b/src/vs/workbench/api/common/extHostTreeViews.ts @@ -658,14 +658,17 @@ class ExtHostTreeView extends Disposable { return undefined; } - const items = await Promise.all(coalesce(elements || []).map(async element => { - const item = await this.dataProvider.getTreeItem(element); - return item && !cts.token.isCancellationRequested ? this.createAndRegisterTreeNode(element, item, parentNode) : null; + const coalescedElements = coalesce(elements || []); + const treeItems = await Promise.all(coalesce(coalescedElements).map(element => { + return this.dataProvider.getTreeItem(element); })); if (cts.token.isCancellationRequested) { return undefined; } + // createAndRegisterTreeNodes adds the nodes to a cache. This must be done sync so that they get added in the correct order. + const items = treeItems.map((item, index) => item ? this.createAndRegisterTreeNode(coalescedElements[index], item, parentNode) : null); + return coalesce(items); } finally { cts.dispose(); diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index 97d25527562..1e10046d465 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -4111,7 +4111,7 @@ export enum InteractiveSessionVoteDirection { Up = 1 } -export enum InteractiveSessionCopyKind { +export enum ChatAgentCopyKind { Action = 1, Toolbar = 2 } diff --git a/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts b/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts index 35e7543d864..3a60e4c025b 100644 --- a/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts +++ b/src/vs/workbench/api/test/browser/extHostApiCommands.test.ts @@ -681,6 +681,33 @@ suite('ExtHostLanguageFeatureCommands', function () { }); }); + // --- document highlights + + test('"vscode.executeDocumentHighlights" API has stopped returning DocumentHighlight[]#200056', async function () { + + + disposables.push(extHost.registerDocumentHighlightProvider(nullExtensionDescription, defaultSelector, { + provideDocumentHighlights() { + return [ + new types.DocumentHighlight(new types.Range(0, 17, 0, 25), types.DocumentHighlightKind.Read) + ]; + } + })); + + await rpcProtocol.sync(); + + return commands.executeCommand('vscode.executeDocumentHighlights', model.uri, new types.Position(0, 0)).then(values => { + assert.ok(Array.isArray(values)); + assert.strictEqual(values.length, 1); + const [first] = values; + assert.strictEqual(first.range.start.line, 0); + assert.strictEqual(first.range.start.character, 17); + assert.strictEqual(first.range.end.line, 0); + assert.strictEqual(first.range.end.character, 25); + }); + + }); + // --- outline test('Outline, back and forth', function () { diff --git a/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts b/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts index b8912834f80..3f60f5ef898 100644 --- a/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts +++ b/src/vs/workbench/api/test/browser/extHostDocumentData.test.ts @@ -441,6 +441,8 @@ suite('ExtHostDocumentData updates line mapping', () => { testLineMappingDirectionAfterEvents(lines, '\r\n', AssertDocumentLineMappingDirection.OffsetToPosition, e); } + ensureNoDisposablesAreLeakedInTestSuite(); + test('line mapping', () => { testLineMappingAfterEvents([ 'This is line one', diff --git a/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts b/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts index a04dc9da18e..3909249dc09 100644 --- a/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts +++ b/src/vs/workbench/api/test/browser/extHostLanguageFeatures.test.ts @@ -286,8 +286,7 @@ suite('ExtHostLanguageFeatures', function () { assert.strictEqual(value.lenses.length, 1); const [data] = value.lenses; const symbol = await Promise.resolve(data.provider.resolveCodeLens!(model, data.symbol, CancellationToken.None)); - assert.strictEqual(symbol!.command!.id, 'missing'); - assert.strictEqual(symbol!.command!.title, '!!MISSING: command!!'); + assert.strictEqual(symbol, undefined); value.dispose(); }); diff --git a/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts b/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts index 40e8224f45f..2738586b97d 100644 --- a/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts +++ b/src/vs/workbench/api/test/browser/extHostTelemetry.test.ts @@ -250,8 +250,6 @@ suite('ExtHostTelemetry', function () { logger.logUsage('test-event', { 'test-data': 'test-data' }); // Initial header is logged then the event - const logs = loggerService.createLogger().logs; - console.log(logs[0]); assert.strictEqual(loggerService.createLogger().logs.length, 3); assert.ok(loggerService.createLogger().logs[2].startsWith('test-extension/test-event')); }); diff --git a/src/vs/workbench/browser/contextkeys.ts b/src/vs/workbench/browser/contextkeys.ts index 24cbbab7351..264b62dc082 100644 --- a/src/vs/workbench/browser/contextkeys.ts +++ b/src/vs/workbench/browser/contextkeys.ts @@ -9,7 +9,7 @@ import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from 'vs/platform/contextkey/common/contextkeys'; import { SplitEditorsVertically, InEditorZenModeContext, ActiveEditorCanRevertContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, ActiveEditorContext, EditorsVisibleContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorGroupEmptyContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsCenteredLayoutContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorReadonlyContext, MainEditorAreaVisibleContext, ActiveEditorAvailableEditorIdsContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, ActiveEditorCanToggleReadonlyContext, applyAvailableEditorIds, TitleBarVisibleContext, TitleBarStyleContext, MultipleEditorGroupsContext, IsAuxiliaryWindowFocusedContext } from 'vs/workbench/common/contextkeys'; import { TEXT_DIFF_EDITOR_ID, EditorInputCapabilities, SIDE_BY_SIDE_EDITOR_ID, EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor'; -import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow } from 'vs/base/browser/dom'; +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'; @@ -348,7 +348,18 @@ export class WorkbenchContextKeysHandler extends Disposable { if (isInputFocused) { const tracker = trackFocus(ownerDocument.activeElement as HTMLElement); Event.once(tracker.onDidBlur)(() => { - this.inputFocusedContext.set(activeElementIsInput()); + + // Ensure we are only updating the context key if we are + // still in the same document that we are tracking. This + // fixes a race condition in multi-window setups where + // the blur event arrives in the inactive window overwriting + // the context key of the active window. This is because + // blur events from the focus tracker are emitted with a + // timeout of 0. + + if (getActiveWindow().document === ownerDocument) { + this.inputFocusedContext.set(activeElementIsInput()); + } tracker.dispose(); }); diff --git a/src/vs/workbench/browser/layout.ts b/src/vs/workbench/browser/layout.ts index 810c53f2abf..4d6849924e4 100644 --- a/src/vs/workbench/browser/layout.ts +++ b/src/vs/workbench/browser/layout.ts @@ -3,9 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; +import { Disposable, DisposableStore, 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, focusWindow, isActiveDocument, getWindow, getWindowId } from 'vs/base/browser/dom'; +import { EventType, addDisposableListener, getClientArea, position, size, IDimension, isAncestorUsingFlowTo, computeScreenAwareSize, getActiveDocument, getWindows, getActiveWindow, focusWindow, 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, isNative, isIOS } from 'vs/base/common/platform'; @@ -212,6 +212,11 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi return this.computeContainerOffset(getWindow(this.activeContainer)); } + get whenActiveContainerStylesLoaded() { + const active = this.activeContainer; + return this.auxWindowStylesLoaded.get(active) || Promise.resolve(); + } + private computeContainerOffset(targetWindow: Window) { let top = 0; let quickPickTop = 0; @@ -240,6 +245,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi //#endregion private readonly parts = new Map(); + private readonly auxWindowStylesLoaded = new Map>(); private initialized = false; private workbenchGrid!: SerializableGrid; @@ -382,9 +388,11 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi // Auxiliary windows this._register(this.auxiliaryWindowService.onDidOpenAuxiliaryWindow(({ window, disposables }) => { const eventDisposables = disposables.add(new DisposableStore()); + this.auxWindowStylesLoaded.set(window.container, window.whenStylesHaveLoaded); this._onDidAddContainer.fire({ container: window.container, disposables: eventDisposables }); disposables.add(window.onDidLayout(dimension => this.handleContainerDidLayout(window.container, dimension))); + disposables.add(toDisposable(() => this.auxWindowStylesLoaded.delete(window.container))); })); } @@ -1091,7 +1099,7 @@ export abstract class Layout extends Disposable implements IWorkbenchLayoutServi return false; } - const activeElement = container.ownerDocument.activeElement; + const activeElement = getActiveElement(); if (!activeElement) { return false; } diff --git a/src/vs/workbench/browser/parts/activitybar/media/activityaction.css b/src/vs/workbench/browser/parts/activitybar/media/activityaction.css index abba016e91d..99df125f3a8 100644 --- a/src/vs/workbench/browser/parts/activitybar/media/activityaction.css +++ b/src/vs/workbench/browser/parts/activitybar/media/activityaction.css @@ -234,7 +234,7 @@ /* Right aligned */ -.monaco-workbench .activitybar.right>.content :not(.monaco-menu)>.monaco-action-bar .profile-badge, +.monaco-workbench .activitybar.right > .content :not(.monaco-menu) > .monaco-action-bar .profile-badge, .monaco-workbench .activitybar.right > .content :not(.monaco-menu) > .monaco-action-bar .badge { left: auto; right: 0; diff --git a/src/vs/workbench/browser/parts/editor/editorGroupView.ts b/src/vs/workbench/browser/parts/editor/editorGroupView.ts index 0cc8da39d6b..3281151bed1 100644 --- a/src/vs/workbench/browser/parts/editor/editorGroupView.ts +++ b/src/vs/workbench/browser/parts/editor/editorGroupView.ts @@ -11,7 +11,7 @@ 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, focusWindow, getWindow } from 'vs/base/browser/dom'; +import { Dimension, trackFocus, addDisposableListener, EventType, EventHelper, findParentWithClass, isAncestor, IDomNodePagePosition, isMouseEvent, isActiveElement, focusWindow, 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'; @@ -510,7 +510,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView { options.sticky = this.model.isSticky(activeEditor); // preserve sticky state options.preserveFocus = true; // handle focus after editor is opened - const activeElement = this.editorContainer.ownerDocument.activeElement; + const activeElement = getActiveElement(); // Show active editor (intentionally not using async to keep // `restoreEditors` from executing in same stack) @@ -1481,7 +1481,7 @@ export class EditorGroupView extends Themable implements IEditorGroupView { } private shouldRestoreFocus(target: Element): boolean { - const activeElement = target.ownerDocument.activeElement; + const activeElement = getActiveElement(); if (activeElement === target.ownerDocument.body) { return true; // always restore focus if nothing is focused currently } diff --git a/src/vs/workbench/browser/parts/editor/editorPanes.ts b/src/vs/workbench/browser/parts/editor/editorPanes.ts index 3e7425c82dd..1094f315842 100644 --- a/src/vs/workbench/browser/parts/editor/editorPanes.ts +++ b/src/vs/workbench/browser/parts/editor/editorPanes.ts @@ -10,7 +10,7 @@ import Severity from 'vs/base/common/severity'; import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { EditorExtensions, EditorInputCapabilities, IEditorOpenContext, IVisibleEditorPane, createEditorOpenError, isEditorOpenError } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; -import { Dimension, show, hide, IDomNodePagePosition, isAncestor, getWindow } from 'vs/base/browser/dom'; +import { Dimension, show, hide, IDomNodePagePosition, isAncestor, getWindow, getActiveElement } 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'; @@ -264,7 +264,7 @@ export class EditorPanes extends Disposable { const pane = this.doShowEditorPane(descriptor); // Remember current active element for deciding to restore focus later - const activeElement = this.editorPanesParent.ownerDocument.activeElement; + const activeElement = getActiveElement(); // Apply input to pane const { changed, cancelled } = await this.doSetInput(pane, editor, options, context); @@ -293,7 +293,7 @@ export class EditorPanes extends Disposable { return true; // restore focus if nothing was focused } - const activeElement = expectedActiveElement.ownerDocument.activeElement; + const activeElement = getActiveElement(); if (!activeElement || activeElement === expectedActiveElement.ownerDocument.body) { return true; // restore focus if nothing is focused currently } diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts index 4227556ceaf..e87d98624fc 100644 --- a/src/vs/workbench/browser/parts/editor/editorPart.ts +++ b/src/vs/workbench/browser/parts/editor/editorPart.ts @@ -5,7 +5,7 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; import { Part } from 'vs/workbench/browser/part'; -import { Dimension, isAncestor, $, EventHelper, addDisposableGenericMouseDownListener, getWindow } from 'vs/base/browser/dom'; +import { Dimension, $, EventHelper, addDisposableGenericMouseDownListener, getWindow, isAncestorOfActiveElement, getActiveElement } from 'vs/base/browser/dom'; import { Event, Emitter, Relay } 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'; @@ -545,13 +545,13 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupsView { return false; } - const activeElement = target.ownerDocument.activeElement; + const activeElement = getActiveElement(); if (activeElement === target.ownerDocument.body) { return true; // always restore focus if nothing is focused currently } // otherwise check for the active element being an ancestor of the target - return isAncestor(activeElement, target); + return isAncestorOfActiveElement(target); } private isTwoDimensionalGrid(): boolean { diff --git a/src/vs/workbench/browser/parts/editor/media/breadcrumbscontrol.css b/src/vs/workbench/browser/parts/editor/media/breadcrumbscontrol.css index 3b8bac4565d..ec3ef9c9c13 100644 --- a/src/vs/workbench/browser/parts/editor/media/breadcrumbscontrol.css +++ b/src/vs/workbench/browser/parts/editor/media/breadcrumbscontrol.css @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -.monaco-workbench .part.editor>.content .editor-group-container .breadcrumbs-control.hidden { +.monaco-workbench .part.editor > .content .editor-group-container .breadcrumbs-control.hidden { display: none; } -.monaco-workbench .part.editor>.content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.selected .monaco-icon-label, -.monaco-workbench .part.editor>.content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.focused .monaco-icon-label { +.monaco-workbench .part.editor > .content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.selected .monaco-icon-label, +.monaco-workbench .part.editor > .content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.focused .monaco-icon-label { text-decoration-line: underline; } -.monaco-workbench .part.editor>.content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.selected .hint-more, -.monaco-workbench .part.editor>.content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.focused .hint-more { +.monaco-workbench .part.editor > .content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.selected .hint-more, +.monaco-workbench .part.editor > .content .editor-group-container .breadcrumbs-control .monaco-breadcrumb-item.focused .hint-more { text-decoration-line: underline; } @@ -41,22 +41,22 @@ flex-direction: column; } -.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree>.input { +.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree > .input { padding: 5px 9px; position: relative; box-sizing: border-box; height: 36px; } -.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree>.tree { +.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree > .tree { height: calc(100% - 36px); } -.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree.inactive>.input { +.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree.inactive > .input { display: none; } -.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree.inactive>.tree { +.monaco-workbench .monaco-breadcrumbs-picker .highlighting-tree.inactive > .tree { height: 100%; } diff --git a/src/vs/workbench/browser/parts/views/viewPaneContainer.ts b/src/vs/workbench/browser/parts/views/viewPaneContainer.ts index 2be6d0ca33b..67b09829a33 100644 --- a/src/vs/workbench/browser/parts/views/viewPaneContainer.ts +++ b/src/vs/workbench/browser/parts/views/viewPaneContainer.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { addDisposableListener, Dimension, DragAndDropObserver, EventType, focusWindow, getWindow, isAncestor } from 'vs/base/browser/dom'; +import { addDisposableListener, Dimension, DragAndDropObserver, EventType, getWindow, isAncestor } from 'vs/base/browser/dom'; import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; import { EventType as TouchEventType, Gesture } from 'vs/base/browser/touch'; import { IActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar'; @@ -611,7 +611,6 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer { } } if (paneToFocus) { - focusWindow(paneToFocus.element); paneToFocus.focus(); } } diff --git a/src/vs/workbench/browser/window.ts b/src/vs/workbench/browser/window.ts index c1ea5ce7b4a..c2e85c276ea 100644 --- a/src/vs/workbench/browser/window.ts +++ b/src/vs/workbench/browser/window.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { isSafari, setFullscreen } from 'vs/base/browser/browser'; -import { addDisposableListener, addDisposableThrottledListener, detectFullscreen, EventHelper, EventType, getWindows, getWindowsCount, windowOpenNoOpener, windowOpenPopup, windowOpenWithSuccess } from 'vs/base/browser/dom'; +import { addDisposableListener, addDisposableThrottledListener, detectFullscreen, EventHelper, EventType, getActiveWindow, getWindow, getWindows, getWindowsCount, windowOpenNoOpener, windowOpenPopup, windowOpenWithSuccess } from 'vs/base/browser/dom'; import { DomEmitter } from 'vs/base/browser/event'; import { HidDeviceData, requestHidDevice, requestSerialPort, requestUsbDevice, SerialPortData, UsbDeviceData } from 'vs/base/browser/deviceAccess'; import { timeout } from 'vs/base/common/async'; @@ -38,9 +38,35 @@ export abstract class BaseWindow extends Disposable { constructor(targetWindow: CodeWindow, dom = { getWindowsCount, getWindows } /* for testing */) { super(); + this.enableWindowFocusOnElementFocus(targetWindow); this.enableMultiWindowAwareTimeout(targetWindow, dom); } + //#region focus handling in multi-window applications + + protected enableWindowFocusOnElementFocus(targetWindow: CodeWindow): void { + const originalFocus = HTMLElement.prototype.focus; + + targetWindow.HTMLElement.prototype.focus = function (this: HTMLElement, options?: FocusOptions | undefined): void { + + // If the active focused window is not the same as the + // window of the element to focus, make sure to focus + // that window first before focusing the element. + const activeWindow = getActiveWindow(); + if (activeWindow.document.hasFocus()) { + const elementWindow = getWindow(this); + if (activeWindow !== elementWindow) { + elementWindow.focus(); + } + } + + // Pass to original focus() method + originalFocus.apply(this, [options]); + }; + } + + //#endregion + //#region timeout handling in multi-window applications /** diff --git a/src/vs/workbench/common/editor.ts b/src/vs/workbench/common/editor.ts index 2c0acaa442a..ee6a8e501c8 100644 --- a/src/vs/workbench/common/editor.ts +++ b/src/vs/workbench/common/editor.ts @@ -928,7 +928,7 @@ export interface IFileEditorInput extends EditorInput, IEncodingSupport, ILangua isResolved(): boolean; } -export interface IFileEditorInputOptions extends ITextEditorOptions { +export interface IFileLimitedEditorInputOptions extends IEditorOptions { /** * If provided, the size of the file will be checked against the limits @@ -937,6 +937,8 @@ export interface IFileEditorInputOptions extends ITextEditorOptions { readonly limits?: IFileReadLimits; } +export interface IFileEditorInputOptions extends ITextEditorOptions, IFileLimitedEditorInputOptions { } + export function createTooLargeFileError(group: IEditorGroup, input: EditorInput, options: IEditorOptions | undefined, message: string, preferencesService: IPreferencesService): Error { return createEditorOpenError(message, [ toAction({ diff --git a/src/vs/workbench/common/editor/resourceEditorInput.ts b/src/vs/workbench/common/editor/resourceEditorInput.ts index d1d5f8c5674..6f5af0deee3 100644 --- a/src/vs/workbench/common/editor/resourceEditorInput.ts +++ b/src/vs/workbench/common/editor/resourceEditorInput.ts @@ -3,14 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Verbosity, EditorInputWithPreferredResource, EditorInputCapabilities } from 'vs/workbench/common/editor'; +import { Verbosity, EditorInputWithPreferredResource, EditorInputCapabilities, IFileLimitedEditorInputOptions } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { URI } from 'vs/base/common/uri'; -import { IFileService } from 'vs/platform/files/common/files'; +import { ByteSize, IFileReadLimits, IFileService, getLargeFileConfirmationLimit } from 'vs/platform/files/common/files'; import { ILabelService } from 'vs/platform/label/common/label'; import { dirname, isEqual } from 'vs/base/common/resources'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; import { IMarkdownString } from 'vs/base/common/htmlContent'; +import { isConfigured } from 'vs/platform/configuration/common/configuration'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; /** * The base class for all editor inputs that open resources. @@ -43,7 +45,8 @@ export abstract class AbstractResourceEditorInput extends EditorInput implements preferredResource: URI | undefined, @ILabelService protected readonly labelService: ILabelService, @IFileService protected readonly fileService: IFileService, - @IFilesConfigurationService protected readonly filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService protected readonly filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService protected readonly textResourceConfigurationService: ITextResourceConfigurationService ) { super(); @@ -179,4 +182,27 @@ export abstract class AbstractResourceEditorInput extends EditorInput implements override isReadonly(): boolean | IMarkdownString { return this.filesConfigurationService.isReadonly(this.resource); } + + protected ensureLimits(options?: IFileLimitedEditorInputOptions): IFileReadLimits | undefined { + if (options?.limits) { + return options.limits; // respect passed in limits if any + } + + // We want to determine the large file configuration based on the best defaults + // for the resource but also respecting user settings. We only apply user settings + // if explicitly configured by the user. Otherwise we pick the best limit for the + // resource scheme. + + const defaultSizeLimit = getLargeFileConfirmationLimit(this.resource); + let configuredSizeLimit: number | undefined = undefined; + + const configuredSizeLimitMb = this.textResourceConfigurationService.inspect(this.resource, null, 'workbench.editorLargeFileConfirmation'); + if (isConfigured(configuredSizeLimitMb)) { + configuredSizeLimit = configuredSizeLimitMb.value * ByteSize.MB; // normalize to MB + } + + return { + size: configuredSizeLimit ?? defaultSizeLimit + }; + } } diff --git a/src/vs/workbench/common/editor/textResourceEditorInput.ts b/src/vs/workbench/common/editor/textResourceEditorInput.ts index 02217560ffd..8416d2cc249 100644 --- a/src/vs/workbench/common/editor/textResourceEditorInput.ts +++ b/src/vs/workbench/common/editor/textResourceEditorInput.ts @@ -18,6 +18,7 @@ import { TextResourceEditorModel } from 'vs/workbench/common/editor/textResource import { IReference } from 'vs/base/common/lifecycle'; import { createTextBufferFactory } from 'vs/editor/common/model/textModel'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; /** * The base class for all editor inputs that open in text editors. @@ -31,9 +32,10 @@ export abstract class AbstractTextResourceEditorInput extends AbstractResourceEd @ITextFileService protected readonly textFileService: ITextFileService, @ILabelService labelService: ILabelService, @IFileService fileService: IFileService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(resource, preferredResource, labelService, fileService, filesConfigurationService); + super(resource, preferredResource, labelService, fileService, filesConfigurationService, textResourceConfigurationService); } override save(group: GroupIdentifier, options?: ITextFileSaveOptions): Promise { @@ -104,9 +106,10 @@ export class TextResourceEditorInput extends AbstractTextResourceEditorInput imp @IEditorService editorService: IEditorService, @IFileService fileService: IFileService, @ILabelService labelService: ILabelService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(resource, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService); + super(resource, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService, textResourceConfigurationService); } override getName(): string { diff --git a/src/vs/workbench/contrib/accessibility/browser/accessibilityStatus.ts b/src/vs/workbench/contrib/accessibility/browser/accessibilityStatus.ts index 5160d1e2791..21e6760ee2a 100644 --- a/src/vs/workbench/contrib/accessibility/browser/accessibilityStatus.ts +++ b/src/vs/workbench/contrib/accessibility/browser/accessibilityStatus.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; +import { Disposable, DisposableStore, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { Event } from 'vs/base/common/event'; import Severity from 'vs/base/common/severity'; import { localize } from 'vs/nls'; @@ -13,28 +13,85 @@ import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configur import { INotificationHandle, INotificationService, NotificationPriority } from 'vs/platform/notification/common/notification'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { IStatusbarEntryAccessor, IStatusbarService, StatusbarAlignment } from 'vs/workbench/services/statusbar/browser/statusbar'; +import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; + +class ScreenReaderModeStatusEntry extends Disposable { + + private readonly screenReaderModeElement = this._register(new MutableDisposable()); + + constructor(@IStatusbarService private readonly statusbarService: IStatusbarService) { + super(); + } + + updateScreenReaderModeElement(visible: boolean): void { + if (visible) { + if (!this.screenReaderModeElement.value) { + const text = localize('screenReaderDetected', "Screen Reader Optimized"); + this.screenReaderModeElement.value = this.statusbarService.addEntry({ + name: localize('status.editor.screenReaderMode', "Screen Reader Mode"), + text, + ariaLabel: text, + command: 'showEditorScreenReaderNotification', + kind: 'prominent' + }, 'status.editor.screenReaderMode', StatusbarAlignment.RIGHT, 100.6); + } + } else { + this.screenReaderModeElement.clear(); + } + } +} export class AccessibilityStatus extends Disposable implements IWorkbenchContribution { private screenReaderNotification: INotificationHandle | null = null; private promptedScreenReader: boolean = false; - private readonly screenReaderModeElement = this._register(new MutableDisposable()); + private readonly screenReaderModeElements = new Set(); constructor( @IConfigurationService private readonly configurationService: IConfigurationService, @INotificationService private readonly notificationService: INotificationService, - @IAccessibilityService private readonly _accessibilityService: IAccessibilityService, - @IStatusbarService private readonly statusbarService: IStatusbarService + @IAccessibilityService private readonly accessibilityService: IAccessibilityService, + @IInstantiationService instantiationService: IInstantiationService, + @IEditorGroupsService private readonly editorGroupService: IEditorGroupsService ) { super(); - this._register(this._accessibilityService.onDidChangeScreenReaderOptimized(() => this.onScreenReaderModeChange())); - this._register(configurationService.onDidChangeConfiguration(c => { + this.createScreenReaderModeElement(instantiationService, this._store); + this.updateScreenReaderModeElements(accessibilityService.isScreenReaderOptimized()); + + CommandsRegistry.registerCommand({ id: 'showEditorScreenReaderNotification', handler: () => this.showScreenReaderNotification() }); + + this.registerListeners(); + } + + private createScreenReaderModeElement(instantiationService: IInstantiationService, disposables: DisposableStore): ScreenReaderModeStatusEntry { + const entry = disposables.add(instantiationService.createInstance(ScreenReaderModeStatusEntry)); + + this.screenReaderModeElements.add(entry); + disposables.add(toDisposable(() => this.screenReaderModeElements.delete(entry))); + + return entry; + } + + private updateScreenReaderModeElements(visible: boolean): void { + for (const entry of this.screenReaderModeElements) { + entry.updateScreenReaderModeElement(visible); + } + } + + private registerListeners(): void { + this._register(this.accessibilityService.onDidChangeScreenReaderOptimized(() => this.onScreenReaderModeChange())); + + this._register(this.configurationService.onDidChangeConfiguration(c => { if (c.affectsConfiguration('editor.accessibilitySupport')) { this.onScreenReaderModeChange(); } })); - CommandsRegistry.registerCommand({ id: 'showEditorScreenReaderNotification', handler: () => this.showScreenReaderNotification() }); - this.updateScreenReaderModeElement(this._accessibilityService.isScreenReaderOptimized()); + + this._register(this.editorGroupService.onDidCreateAuxiliaryEditorPart(({ instantiationService, disposables }) => { + const entry = this.createScreenReaderModeElement(instantiationService, disposables); + entry.updateScreenReaderModeElement(this.accessibilityService.isScreenReaderOptimized()); + })); } private showScreenReaderNotification(): void { @@ -60,27 +117,11 @@ export class AccessibilityStatus extends Disposable implements IWorkbenchContrib Event.once(this.screenReaderNotification.onDidClose)(() => this.screenReaderNotification = null); } - private updateScreenReaderModeElement(visible: boolean): void { - if (visible) { - if (!this.screenReaderModeElement.value) { - const text = localize('screenReaderDetected', "Screen Reader Optimized"); - this.screenReaderModeElement.value = this.statusbarService.addEntry({ - name: localize('status.editor.screenReaderMode', "Screen Reader Mode"), - text, - ariaLabel: text, - command: 'showEditorScreenReaderNotification', - kind: 'prominent' - }, 'status.editor.screenReaderMode', StatusbarAlignment.RIGHT, 100.6); - } - } else { - this.screenReaderModeElement.clear(); - } - } private onScreenReaderModeChange(): void { // We only support text based editors - const screenReaderDetected = this._accessibilityService.isScreenReaderOptimized(); + const screenReaderDetected = this.accessibilityService.isScreenReaderOptimized(); if (screenReaderDetected) { const screenReaderConfiguration = this.configurationService.getValue('editor.accessibilitySupport'); if (screenReaderConfiguration === 'auto') { @@ -94,6 +135,14 @@ export class AccessibilityStatus extends Disposable implements IWorkbenchContrib if (this.screenReaderNotification) { this.screenReaderNotification.close(); } - this.updateScreenReaderModeElement(this._accessibilityService.isScreenReaderOptimized()); + this.updateScreenReaderModeElements(this.accessibilityService.isScreenReaderOptimized()); + } + + override dispose(): void { + super.dispose(); + + for (const entry of this.screenReaderModeElements) { + entry.dispose(); + } } } diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts index 46be79f9858..e776928802f 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts @@ -27,7 +27,7 @@ import { IChatEditorOptions } from 'vs/workbench/contrib/chat/browser/chatEditor import { ChatEditorInput } from 'vs/workbench/contrib/chat/browser/chatEditorInput'; import { ChatViewPane } from 'vs/workbench/contrib/chat/browser/chatViewPane'; import { IChatAgentService } from 'vs/workbench/contrib/chat/common/chatAgents'; -import { CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION, CONTEXT_PROVIDER_EXISTS, CONTEXT_REQUEST, CONTEXT_RESPONSE } from 'vs/workbench/contrib/chat/common/chatContextKeys'; +import { CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION, CONTEXT_PROVIDER_EXISTS, CONTEXT_REQUEST, CONTEXT_RESPONSE } from 'vs/workbench/contrib/chat/common/chatContextKeys'; import { IChatContributionService } from 'vs/workbench/contrib/chat/common/chatContributionService'; import { chatAgentLeader } from 'vs/workbench/contrib/chat/common/chatParserTypes'; import { IChatDetail, IChatService } from 'vs/workbench/contrib/chat/common/chatService'; @@ -38,11 +38,22 @@ import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle export const CHAT_CATEGORY = { value: localize('chat.category', "Chat"), original: 'Chat' }; export const CHAT_OPEN_ACTION_ID = 'workbench.action.chat.open'; -class QuickChatGlobalAction extends Action2 { +export interface IChatViewOpenOptions { + /** + * The query for quick chat. + */ + query: string; + /** + * Whether the query is partial and will await more input from the user. + */ + isPartialQuery?: boolean; +} + +class OpenChatGlobalAction extends Action2 { constructor() { super({ id: CHAT_OPEN_ACTION_ID, - title: { value: localize('quickChat', "Quick Chat"), original: 'Quick Chat' }, + title: localize2('openChat', "Open Chat"), precondition: CONTEXT_PROVIDER_EXISTS, icon: Codicon.commentDiscussion, f1: false, @@ -57,7 +68,9 @@ class QuickChatGlobalAction extends Action2 { }); } - override async run(accessor: ServicesAccessor, query?: string): Promise { + override async run(accessor: ServicesAccessor, opts?: string | IChatViewOpenOptions): Promise { + opts = typeof opts === 'string' ? { query: opts } : opts; + const chatService = accessor.get(IChatService); const chatWidgetService = accessor.get(IChatWidgetService); const providers = chatService.getProviderInfos(); @@ -68,9 +81,14 @@ class QuickChatGlobalAction extends Action2 { if (!chatWidget) { return; } - if (query) { - chatWidget.acceptInput(query); + if (opts?.query) { + if (opts.isPartialQuery) { + chatWidget.setInput(opts.query); + } else { + chatWidget.acceptInput(opts.query); + } } + chatWidget.focusInput(); } } @@ -132,7 +150,7 @@ export class ChatSubmitEditorAction extends EditorAction2 { } export function registerChatActions() { - registerAction2(QuickChatGlobalAction); + registerAction2(OpenChatGlobalAction); registerAction2(ChatSubmitEditorAction); registerAction2(ChatSubmitSecondaryAgentEditorAction); @@ -161,7 +179,7 @@ export function registerChatActions() { super({ id: 'chat.action.focus', title: { value: localize('actions.interactiveSession.focus', "Focus Chat List"), original: 'Focus Chat List' }, - precondition: CONTEXT_IN_CHAT_INPUT, + precondition: ContextKeyExpr.and(CONTEXT_IN_CHAT_INPUT, CONTEXT_CHAT_INPUT_CURSOR_AT_TOP), category: CHAT_CATEGORY, keybinding: { when: EditorContextKeys.textInputFocus, @@ -206,7 +224,7 @@ export function registerChatActions() { keybinding: { primary: KeyMod.CtrlCmd | KeyCode.DownArrow, weight: KeybindingWeight.WorkbenchContrib, - when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, ContextKeyExpr.not(EditorContextKeys.focus.key)) + when: ContextKeyExpr.and(CONTEXT_IN_CHAT_SESSION, CONTEXT_IN_CHAT_INPUT.negate()) } }); } diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts index 9c087ffd9ca..bbf5ba106b9 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.ts @@ -28,7 +28,7 @@ import { CHAT_CATEGORY } from 'vs/workbench/contrib/chat/browser/actions/chatAct import { IChatWidgetService } from 'vs/workbench/contrib/chat/browser/chat'; import { ICodeBlockActionContext } from 'vs/workbench/contrib/chat/browser/codeBlockPart'; import { CONTEXT_IN_CHAT_INPUT, CONTEXT_IN_CHAT_SESSION, CONTEXT_PROVIDER_EXISTS } from 'vs/workbench/contrib/chat/common/chatContextKeys'; -import { IChatService, IDocumentContext, InteractiveSessionCopyKind } from 'vs/workbench/contrib/chat/common/chatService'; +import { IChatService, IDocumentContext, ChatAgentCopyKind } from 'vs/workbench/contrib/chat/common/chatService'; import { IChatResponseViewModel, isResponseVM } from 'vs/workbench/contrib/chat/common/chatViewModel'; import { CTX_INLINE_CHAT_VISIBLE } from 'vs/workbench/contrib/inlineChat/common/inlineChat'; import { insertCell } from 'vs/workbench/contrib/notebook/browser/controller/cellOperations'; @@ -114,7 +114,7 @@ export function registerChatCodeBlockActions() { action: { kind: 'copy', codeBlockIndex: context.codeBlockIndex, - copyType: InteractiveSessionCopyKind.Toolbar, + copyKind: ChatAgentCopyKind.Toolbar, copiedCharacters: context.code.length, totalCharacters: context.code.length, copiedText: context.code, @@ -157,7 +157,7 @@ export function registerChatCodeBlockActions() { action: { kind: 'copy', codeBlockIndex: context.codeBlockIndex, - copyType: InteractiveSessionCopyKind.Action, + copyKind: ChatAgentCopyKind.Action, copiedText, copiedCharacters: copiedText.length, totalCharacters, @@ -466,7 +466,7 @@ export function registerChatCodeBlockActions() { terminalGroupService.showPanel(true); } - terminal.sendText(context.code, false, true); + terminal.runCommand(context.code, false); if (isResponseVM(context.element)) { chatService.notifyUserAction({ diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.ts index e7b68fa51b3..834c5eca7e1 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.ts @@ -6,7 +6,7 @@ import { localize } from 'vs/nls'; import { Action2, IAction2Options, MenuId, registerAction2 } from 'vs/platform/actions/common/actions'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; +import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { ViewAction } from 'vs/workbench/browser/parts/views/viewPane'; import { ActiveEditorContext } from 'vs/workbench/common/contextkeys'; import { IViewsService } from 'vs/workbench/common/views'; @@ -19,7 +19,7 @@ import { CONTEXT_PROVIDER_EXISTS } from 'vs/workbench/contrib/chat/common/chatCo import { IChatContributionService } from 'vs/workbench/contrib/chat/common/chatContributionService'; import { IChatService } from 'vs/workbench/contrib/chat/common/chatService'; import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { ACTIVE_GROUP, AUX_WINDOW_GROUP, IEditorService } from 'vs/workbench/services/editor/common/editorService'; enum MoveToNewLocation { Editor = 'Editor', @@ -63,25 +63,11 @@ export function getMoveToAction(viewId: string, providerId: string, moveTo: Move return; } - const editorGroupService = accessor.get(IEditorGroupsService); - const instantiationService = accessor.get(IInstantiationService); const editorService = accessor.get(IEditorService); const sessionId = viewModel.sessionId; view.clear(); - switch (moveTo) { - case (MoveToNewLocation.Editor): { - await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { sessionId: viewModel.sessionId }, pinned: true } }); - break; - } - case (MoveToNewLocation.Window): { - await openInNewWindow(instantiationService, editorGroupService, { target: { sessionId } }); - break; - } - default: { - throw new Error(`Unexpected move to location : ${moveTo}`); - } - } + await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { sessionId }, pinned: true } }, moveTo === MoveToNewLocation.Window ? AUX_WINDOW_GROUP : ACTIVE_GROUP); } }; } @@ -156,26 +142,12 @@ async function executeMoveToAction(accessor: ServicesAccessor, moveTo: MoveToNew const viewService = accessor.get(IViewsService); const chatService = accessor.get(IChatService); const editorService = accessor.get(IEditorService); - const instantiationService = accessor.get(IInstantiationService); - const editorGroupService = accessor.get(IEditorGroupsService); const widget = widgetService.lastFocusedWidget; if (!widget || !('viewId' in widget.viewContext)) { const providerId = chatService.getProviderInfos()[0].id; - switch (moveTo) { - case (MoveToNewLocation.Editor): { - await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { providerId }, pinned: true } }); - break; - } - case (MoveToNewLocation.Window): { - await openInNewWindow(instantiationService, editorGroupService, { target: { providerId } }); - break; - } - default: { - throw new Error(`Unexpected move to location : ${moveTo}`); - } - } + await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { providerId }, pinned: true } }, moveTo === MoveToNewLocation.Window ? AUX_WINDOW_GROUP : ACTIVE_GROUP); return; } @@ -188,24 +160,7 @@ async function executeMoveToAction(accessor: ServicesAccessor, moveTo: MoveToNew const view = await viewService.openView(widget.viewContext.viewId) as ChatViewPane; view.clear(); - switch (moveTo) { - case (MoveToNewLocation.Editor): { - await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { sessionId: sessionId }, pinned: true } }); - break; - } - case (MoveToNewLocation.Window): { - await openInNewWindow(instantiationService, editorGroupService, { target: { sessionId } }); - } - default: { - throw new Error(`Unexpected move to location : ${moveTo}`); - } - } -} - -async function openInNewWindow(intstantiationService: IInstantiationService, editorGroupService: IEditorGroupsService, options: IChatEditorOptions) { - const auxiliaryEditorPart = await editorGroupService.createAuxiliaryEditorPart(); - const chatEditorInput = intstantiationService.createInstance(ChatEditorInput, ChatEditorInput.getNewEditorUri(), options); - await auxiliaryEditorPart.activeGroup.openEditor(chatEditorInput, { pinned: true }); + await editorService.openEditor({ resource: ChatEditorInput.getNewEditorUri(), options: { target: { sessionId }, pinned: true } }, moveTo === MoveToNewLocation.Window ? AUX_WINDOW_GROUP : ACTIVE_GROUP); } async function moveToSidebar(accessor: ServicesAccessor): Promise { diff --git a/src/vs/workbench/contrib/chat/browser/chat.ts b/src/vs/workbench/contrib/chat/browser/chat.ts index 3df1e83af19..17d1875bfc4 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.ts @@ -111,7 +111,7 @@ export interface IChatWidget { focus(item: ChatTreeItem): void; moveFocus(item: ChatTreeItem, type: 'next' | 'previous'): void; getFocus(): ChatTreeItem | undefined; - updateInput(query?: string): void; + setInput(query?: string): void; getInput(): string; acceptInput(query?: string): void; acceptInputWithPrefix(prefix: string): void; diff --git a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts index f4a74d52b48..a5871fac4e5 100644 --- a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts @@ -35,7 +35,7 @@ import { IChatExecuteActionContext, SubmitAction } from 'vs/workbench/contrib/ch import { IChatWidget } from 'vs/workbench/contrib/chat/browser/chat'; import { ChatFollowups } from 'vs/workbench/contrib/chat/browser/chatFollowups'; import { IChatAgentService } from 'vs/workbench/contrib/chat/common/chatAgents'; -import { CONTEXT_CHAT_INPUT_HAS_TEXT, CONTEXT_IN_CHAT_INPUT } from 'vs/workbench/contrib/chat/common/chatContextKeys'; +import { CONTEXT_CHAT_INPUT_CURSOR_AT_TOP, CONTEXT_CHAT_INPUT_HAS_TEXT, CONTEXT_IN_CHAT_INPUT } from 'vs/workbench/contrib/chat/common/chatContextKeys'; import { chatAgentLeader } from 'vs/workbench/contrib/chat/common/chatParserTypes'; import { IChatReplyFollowup } from 'vs/workbench/contrib/chat/common/chatService'; import { IChatResponseViewModel } from 'vs/workbench/contrib/chat/common/chatViewModel'; @@ -82,11 +82,13 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge return this._inputEditor; } - private history: HistoryNavigator<{ text: string; state?: any }>; + private history: HistoryNavigator; + private historyStates: Map = new Map(); private historyNavigationBackwardsEnablement!: IContextKey; private historyNavigationForewardsEnablement!: IContextKey; private inputModel: ITextModel | undefined; private inputEditorHasText: IContextKey; + private chatCursorAtTop: IContextKey; private providerId: string | undefined; private cachedDimensions: dom.Dimension | undefined; @@ -108,6 +110,8 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge super(); this.inputEditorHasText = CONTEXT_CHAT_INPUT_HAS_TEXT.bindTo(contextKeyService); + this.chatCursorAtTop = CONTEXT_CHAT_INPUT_CURSOR_AT_TOP.bindTo(contextKeyService); + this.history = new HistoryNavigator([], 5); this._register(this.historyService.onDidClearHistory(() => this.history.clear())); this._register(this.configurationService.onDidChangeConfiguration(e => { @@ -129,7 +133,11 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge setState(providerId: string, inputValue: string | undefined): void { this.providerId = providerId; const history = this.historyService.getHistory(providerId); - this.history = new HistoryNavigator(history, 50); + this.historyStates = new Map(history.map(h => [h.text, h.state])); + const historyTexts: string[] = []; + this.historyStates.forEach((_, str) => historyTexts.push(str)); + + this.history = new HistoryNavigator(historyTexts, 50); if (typeof inputValue === 'string') { this.setValue(inputValue); @@ -151,11 +159,11 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge private navigateHistory(previous: boolean): void { const historyInput = (previous ? (this.history.previous() ?? this.history.first()) : this.history.next()) - ?? { text: '' }; + ?? ''; - aria.status(historyInput.text); - this.setValue(historyInput.text); - this._onDidLoadInputState.fire(historyInput.state); + aria.status(historyInput); + this.setValue(historyInput); + this._onDidLoadInputState.fire(this.historyStates.get(historyInput)); if (previous) { this._inputEditor.setPosition({ lineNumber: 1, column: 1 }); } else { @@ -188,7 +196,8 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge */ async acceptInput(userQuery?: string, inputState?: any): Promise { if (userQuery) { - this.history.add({ text: userQuery, state: inputState }); + this.history.add(userQuery); + this.historyStates.set(userQuery, inputState); } if (this.accessibilityService.isScreenReaderOptimized() && isMacintosh) { @@ -273,7 +282,9 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge return; } - this.historyNavigationBackwardsEnablement.set(e.position.column === 1 && e.position.lineNumber === 1); + const atTop = e.position.column === 1 && e.position.lineNumber === 1; + this.historyNavigationBackwardsEnablement.set(atTop); + this.chatCursorAtTop.set(atTop); this.historyNavigationForewardsEnablement.set(e.position.equals(getLastPosition(model))); })); @@ -364,7 +375,8 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge saveState(): void { const inputHistory = this.history.getHistory(); - this.historyService.saveHistory(this.providerId!, inputHistory); + const historyEntries = inputHistory.map(entry => ({ text: entry, state: this.historyStates.get(entry) })); + this.historyService.saveHistory(this.providerId!, historyEntries); } } diff --git a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts index 7fa4749fd20..15ce304da13 100644 --- a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts +++ b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts @@ -39,6 +39,7 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { FileKind } from 'vs/platform/files/common/files'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { WorkbenchCompressibleAsyncDataTree, WorkbenchList } from 'vs/platform/list/browser/listService'; import { ILogService } from 'vs/platform/log/common/log'; import { IOpenerService } from 'vs/platform/opener/common/opener'; @@ -140,6 +141,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer { + const keybinding = this.keybindingService.lookupKeybinding(command); + const keybindingLabel = keybinding?.getLabel(); + if (keybindingLabel) { + // ideally we would use the keybindingLabel renderer but dompurify sanitizes the styling + return `${match} (\`${keybindingLabel}\`)`; + } + return match; + }); + + markdown = new MarkdownString(value, { isTrusted: { // Disable all other config options except isTrusted enabledCommands: typeof markdown.isTrusted === 'object' ? markdown.isTrusted?.enabledCommands : [] ?? [] diff --git a/src/vs/workbench/contrib/chat/browser/chatWidget.ts b/src/vs/workbench/contrib/chat/browser/chatWidget.ts index a01464ef766..443afc6be81 100644 --- a/src/vs/workbench/contrib/chat/browser/chatWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/chatWidget.ts @@ -403,7 +403,7 @@ export class ChatWidget extends Disposable implements IChatWidget { this._register(this.inputPart.onDidLoadInputState(state => { this.contribs.forEach(c => { - if (c.setInputState && state[c.id]) { + if (c.setInputState && typeof state === 'object' && state?.[c.id]) { c.setInputState(state[c.id]); } }); @@ -504,7 +504,7 @@ export class ChatWidget extends Disposable implements IChatWidget { this.viewModel?.resetInputPlaceholder(); } - updateInput(value = ''): void { + setInput(value = ''): void { this.inputPart.setValue(value); } diff --git a/src/vs/workbench/contrib/chat/common/chatContextKeys.ts b/src/vs/workbench/contrib/chat/common/chatContextKeys.ts index 85941ee0fd4..d5cb83c170a 100644 --- a/src/vs/workbench/contrib/chat/common/chatContextKeys.ts +++ b/src/vs/workbench/contrib/chat/common/chatContextKeys.ts @@ -19,3 +19,4 @@ export const CONTEXT_IN_CHAT_INPUT = new RawContextKey('inChatInput', f export const CONTEXT_IN_CHAT_SESSION = new RawContextKey('inChat', false, { type: 'boolean', description: localize('inChat', "True when focus is in the chat widget, false otherwise.") }); export const CONTEXT_PROVIDER_EXISTS = new RawContextKey('hasChatProvider', false, { type: 'boolean', description: localize('hasChatProvider', "True when some chat provider has been registered.") }); +export const CONTEXT_CHAT_INPUT_CURSOR_AT_TOP = new RawContextKey('chatCursorAtTop', false); diff --git a/src/vs/workbench/contrib/chat/common/chatService.ts b/src/vs/workbench/contrib/chat/common/chatService.ts index 9f372473a94..4cf8455129d 100644 --- a/src/vs/workbench/contrib/chat/common/chatService.ts +++ b/src/vs/workbench/contrib/chat/common/chatService.ts @@ -200,7 +200,7 @@ export interface IChatVoteAction { reportIssue?: boolean; } -export enum InteractiveSessionCopyKind { +export enum ChatAgentCopyKind { // Keyboard shortcut or context menu Action = 1, Toolbar = 2 @@ -209,7 +209,7 @@ export enum InteractiveSessionCopyKind { export interface IChatCopyAction { kind: 'copy'; codeBlockIndex: number; - copyType: InteractiveSessionCopyKind; + copyKind: ChatAgentCopyKind; copiedCharacters: number; totalCharacters: number; copiedText: string; diff --git a/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts b/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts index 47ebd3b8604..6c873f5a4f5 100644 --- a/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts +++ b/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts @@ -26,7 +26,7 @@ import { ChatModel, ChatModelInitState, ChatRequestModel, ChatWelcomeMessageMode import { ChatRequestAgentPart, ChatRequestAgentSubcommandPart, ChatRequestSlashCommandPart, IParsedChatRequest } from 'vs/workbench/contrib/chat/common/chatParserTypes'; import { ChatMessageRole, IChatMessage } from 'vs/workbench/contrib/chat/common/chatProvider'; import { ChatRequestParser } from 'vs/workbench/contrib/chat/common/chatRequestParser'; -import { IChat, IChatCompleteResponse, IChatDetail, IChatDynamicRequest, IChatFollowup, IChatProgress, IChatProvider, IChatProviderInfo, IChatResponse, IChatService, IChatTransferredSessionData, IChatUserActionEvent, InteractiveSessionCopyKind, InteractiveSessionVoteDirection } from 'vs/workbench/contrib/chat/common/chatService'; +import { IChat, IChatCompleteResponse, IChatDetail, IChatDynamicRequest, IChatFollowup, IChatProgress, IChatProvider, IChatProviderInfo, IChatResponse, IChatService, IChatTransferredSessionData, IChatUserActionEvent, ChatAgentCopyKind, InteractiveSessionVoteDirection } from 'vs/workbench/contrib/chat/common/chatService'; import { IChatSlashCommandService } from 'vs/workbench/contrib/chat/common/chatSlashCommands'; import { IChatVariablesService } from 'vs/workbench/contrib/chat/common/chatVariables'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; @@ -224,7 +224,7 @@ export class ChatService extends Disposable implements IChatService { } else if (action.action.kind === 'copy') { this.telemetryService.publicLog2('interactiveSessionCopy', { providerId: action.providerId, - copyKind: action.action.copyType === InteractiveSessionCopyKind.Action ? 'action' : 'toolbar' + copyKind: action.action.copyKind === ChatAgentCopyKind.Action ? 'action' : 'toolbar' }); } else if (action.action.kind === 'insert') { this.telemetryService.publicLog2('interactiveSessionInsert', { diff --git a/src/vs/workbench/contrib/chat/electron-sandbox/actions/voiceChatActions.ts b/src/vs/workbench/contrib/chat/electron-sandbox/actions/voiceChatActions.ts index e82a6afea81..84aa87c7756 100644 --- a/src/vs/workbench/contrib/chat/electron-sandbox/actions/voiceChatActions.ts +++ b/src/vs/workbench/contrib/chat/electron-sandbox/actions/voiceChatActions.ts @@ -169,7 +169,7 @@ class VoiceChatSessionControllerFactory { onDidCancelInput: Event.filter(viewsService.onDidChangeViewVisibility, e => e.id === chatContributionService.getViewIdForProvider(chatView.providerId)), focusInput: () => chatView.focusInput(), acceptInput: () => chatView.acceptInput(), - updateInput: text => chatView.updateInput(text), + updateInput: text => chatView.setInput(text), getInput: () => chatView.getInput(), setInputPlaceholder: text => chatView.setInputPlaceholder(text), clearInputPlaceholder: () => chatView.resetInputPlaceholder() @@ -183,7 +183,7 @@ class VoiceChatSessionControllerFactory { onDidCancelInput: quickChatService.onDidClose, focusInput: () => quickChat.focusInput(), acceptInput: () => quickChat.acceptInput(), - updateInput: text => quickChat.updateInput(text), + updateInput: text => quickChat.setInput(text), getInput: () => quickChat.getInput(), setInputPlaceholder: text => quickChat.setInputPlaceholder(text), clearInputPlaceholder: () => quickChat.resetInputPlaceholder() diff --git a/src/vs/workbench/contrib/chat/test/common/chatModel.test.ts b/src/vs/workbench/contrib/chat/test/common/chatModel.test.ts index 33f0e1d0a06..60197332945 100644 --- a/src/vs/workbench/contrib/chat/test/common/chatModel.test.ts +++ b/src/vs/workbench/contrib/chat/test/common/chatModel.test.ts @@ -122,6 +122,8 @@ suite('ChatModel', () => { }); suite('Response', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('content, markdown', async () => { const response = new Response([]); response.updateContent({ content: 'text', kind: 'content' }); diff --git a/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts b/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts index 1732dc5fffe..76c1a353154 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts @@ -80,6 +80,8 @@ export class EmptyTextEditorHintContribution implements IEditorContribution { this.toDispose = []; this.toDispose.push(this.editor.onDidChangeModel(() => this.update())); this.toDispose.push(this.editor.onDidChangeModelLanguage(() => this.update())); + this.toDispose.push(this.editor.onDidChangeModelContent(() => this.update())); + this.toDispose.push(this.inlineChatService.onDidChangeProviders(() => this.update())); this.toDispose.push(this.editor.onDidChangeModelDecorations(() => this.update())); this.toDispose.push(this.configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration(emptyTextEditorHintSetting)) { @@ -122,15 +124,28 @@ export class EmptyTextEditorHintContribution implements IEditorContribution { return false; } + if (this.editor.getModel()?.getValueLength()) { + return false; + } + + const hasConflictingDecorations = Boolean(this.editor.getLineDecorations(1)?.find((d) => + d.options.beforeContentClassName + || d.options.afterContentClassName + || d.options.before?.content + || d.options.after?.content + )); + if (hasConflictingDecorations) { + return false; + } + const inlineChatProviders = [...this.inlineChatService.getAllProvider()]; const shouldRenderDefaultHint = model?.uri.scheme === Schemas.untitled && languageId === PLAINTEXT_LANGUAGE_ID && !inlineChatProviders.length; return inlineChatProviders.length > 0 || shouldRenderDefaultHint; } protected update(): void { - this.textHintContentWidget?.dispose(); - - if (this._shouldRenderHint()) { + const shouldRenderHint = this._shouldRenderHint(); + if (shouldRenderHint && !this.textHintContentWidget) { this.textHintContentWidget = new EmptyTextEditorHintContentWidget( this.editor, this._getOptions(), @@ -142,6 +157,9 @@ export class EmptyTextEditorHintContribution implements IEditorContribution { this.telemetryService, this.productService ); + } else if (!shouldRenderHint && this.textHintContentWidget) { + this.textHintContentWidget.dispose(); + this.textHintContentWidget = undefined; } } @@ -172,8 +190,6 @@ class EmptyTextEditorHintContentWidget implements IContentWidget { private readonly productService: IProductService ) { this.toDispose = new DisposableStore(); - this.toDispose.add(this.inlineChatService.onDidChangeProviders(() => this.onDidChangeModelContent())); - this.toDispose.add(this.editor.onDidChangeModelContent(() => this.onDidChangeModelContent())); this.toDispose.add(this.editor.onDidChangeConfiguration((e: ConfigurationChangedEvent) => { if (this.domNode && e.hasChanged(EditorOption.fontInfo)) { this.editor.applyFontInfo(this.domNode); @@ -185,28 +201,7 @@ class EmptyTextEditorHintContentWidget implements IContentWidget { status(this.ariaLabel); } })); - this.onDidChangeModelContent(); - } - - private onDidChangeModelContent(): void { - if (!this.editor.getModel()?.getValueLength() && !this.hasConflictingDecorations()) { - this.editor.addContentWidget(this); - this.isVisible = true; - } else { - this.editor.removeContentWidget(this); - this.isVisible = false; - } - } - - private hasConflictingDecorations(): boolean { - const res = Boolean(this.editor.getLineDecorations(1)?.find((d) => - d.options.beforeContentClassName - || d.options.afterContentClassName - || d.options.before?.content - || d.options.after?.content - )); - - return res; + this.editor.addContentWidget(this); } getId(): string { diff --git a/src/vs/workbench/contrib/comments/browser/media/review.css b/src/vs/workbench/contrib/comments/browser/media/review.css index b2ce28c5e14..cad293ca09e 100644 --- a/src/vs/workbench/contrib/comments/browser/media/review.css +++ b/src/vs/workbench/contrib/comments/browser/media/review.css @@ -298,8 +298,8 @@ width: auto; } -.review-widget .body .comment-additional-actions .button-bar>.monaco-text-button, -.review-widget .body .comment-additional-actions .button-bar>.monaco-button-dropdown { +.review-widget .body .comment-additional-actions .button-bar > .monaco-text-button, +.review-widget .body .comment-additional-actions .button-bar > .monaco-button-dropdown { margin: 0 10px 0 0; } diff --git a/src/vs/workbench/contrib/debug/browser/debugService.ts b/src/vs/workbench/contrib/debug/browser/debugService.ts index a0e2bd56df4..9f1dad419b3 100644 --- a/src/vs/workbench/contrib/debug/browser/debugService.ts +++ b/src/vs/workbench/contrib/debug/browser/debugService.ts @@ -493,7 +493,7 @@ export class DebugService implements IDebugService { return false; } - const cfg = await this.configurationManager.resolveDebugConfigurationWithSubstitutedVariables(launch && launch.workspace ? launch.workspace.uri : undefined, type, resolvedConfig, initCancellationToken.token); + const cfg = await this.configurationManager.resolveDebugConfigurationWithSubstitutedVariables(launch && launch.workspace ? launch.workspace.uri : undefined, resolvedConfig.type, resolvedConfig, initCancellationToken.token); if (!cfg) { if (launch && type && cfg === null && !initCancellationToken.token.isCancellationRequested) { // show launch.json only for "config" being "null". await launch.openConfigFile({ preserveFocus: true, type }, initCancellationToken.token); diff --git a/src/vs/workbench/contrib/debug/browser/debugToolBar.ts b/src/vs/workbench/contrib/debug/browser/debugToolBar.ts index 01e9ae71db7..b9327dbdced 100644 --- a/src/vs/workbench/contrib/debug/browser/debugToolBar.ts +++ b/src/vs/workbench/contrib/debug/browser/debugToolBar.ts @@ -11,7 +11,7 @@ import { Action, IAction, IRunEvent, WorkbenchActionExecutedClassification, Work import * as arrays from 'vs/base/common/arrays'; import { RunOnceScheduler } from 'vs/base/common/async'; import * as errors from 'vs/base/common/errors'; -import { DisposableStore, dispose, IDisposable } from 'vs/base/common/lifecycle'; +import { DisposableStore, dispose, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; import { URI } from 'vs/base/common/uri'; import 'vs/css!./media/debugToolBar'; import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; @@ -38,7 +38,8 @@ import * as icons from 'vs/workbench/contrib/debug/browser/debugIcons'; import { CONTEXT_DEBUG_STATE, CONTEXT_FOCUSED_SESSION_IS_ATTACH, CONTEXT_FOCUSED_SESSION_IS_NO_DEBUG, CONTEXT_IN_DEBUG_MODE, CONTEXT_MULTI_SESSION_DEBUG, CONTEXT_STEP_BACK_SUPPORTED, CONTEXT_SUSPEND_DEBUGGEE_SUPPORTED, CONTEXT_TERMINATE_DEBUGGEE_SUPPORTED, IDebugConfiguration, IDebugService, State, VIEWLET_ID } from 'vs/workbench/contrib/debug/common/debug'; import { EditorTabsMode, IWorkbenchLayoutService, LayoutSettings, Parts } from 'vs/workbench/services/layout/browser/layoutService'; import { Codicon } from 'vs/base/common/codicons'; -import { mainWindow } from 'vs/base/browser/window'; +import { CodeWindow, mainWindow } from 'vs/base/browser/window'; +import { clamp } from 'vs/base/common/numbers'; const DEBUG_TOOLBAR_POSITION_KEY = 'debug.actionswidgetposition'; const DEBUG_TOOLBAR_Y_KEY = 'debug.actionswidgety'; @@ -57,6 +58,8 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { private isBuilt = false; private readonly stopActionViewItemDisposables = this._register(new DisposableStore()); + /** coordinate of the debug toolbar per aux window */ + private readonly auxWindowCoordinates = new WeakMap(); constructor( @INotificationService private readonly notificationService: INotificationService, @@ -148,30 +151,31 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { // log in telemetry this.telemetryService.publicLog2('workbenchActionExecuted', { id: e.action.id, from: 'debugActionsWidget' }); })); - this._register(dom.addDisposableListener(mainWindow, dom.EventType.RESIZE, () => this.setCoordinates())); this._register(dom.addDisposableGenericMouseUpListener(this.dragArea, (event: MouseEvent) => { const mouseClickEvent = new StandardMouseEvent(dom.getWindow(this.dragArea), event); + const activeWindow = dom.getWindow(this.layoutService.activeContainer); if (mouseClickEvent.detail === 2) { // double click on debug bar centers it again #8250 const widgetWidth = this.$el.clientWidth; - this.setCoordinates(0.5 * mainWindow.innerWidth - 0.5 * widgetWidth, 0); + this.setCoordinates(0.5 * activeWindow.innerWidth - 0.5 * widgetWidth, 0); this.storePosition(); } })); this._register(dom.addDisposableGenericMouseDownListener(this.dragArea, (event: MouseEvent) => { this.dragArea.classList.add('dragged'); + const activeWindow = dom.getWindow(this.layoutService.activeContainer); - const mouseMoveListener = dom.addDisposableGenericMouseMoveListener(mainWindow, (e: MouseEvent) => { - const mouseMoveEvent = new StandardMouseEvent(mainWindow, e); + const mouseMoveListener = dom.addDisposableGenericMouseMoveListener(activeWindow, (e: MouseEvent) => { + const mouseMoveEvent = new StandardMouseEvent(activeWindow, e); // Prevent default to stop editor selecting text #8524 mouseMoveEvent.preventDefault(); // Reduce x by width of drag handle to reduce jarring #16604 this.setCoordinates(mouseMoveEvent.posx - 14, mouseMoveEvent.posy - 14); }); - const mouseUpListener = dom.addDisposableGenericMouseUpListener(mainWindow, (e: MouseEvent) => { + const mouseUpListener = dom.addDisposableGenericMouseUpListener(activeWindow, (e: MouseEvent) => { this.storePosition(); this.dragArea.classList.remove('dragged'); @@ -182,18 +186,36 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { this._register(this.layoutService.onDidChangePartVisibility(() => this.setYCoordinate())); this._register(browser.PixelRatio.onDidChange(() => this.setYCoordinate())); + + const resizeListener = this._register(new MutableDisposable()); + + this._register(this.layoutService.onDidChangeActiveContainer(() => { + this._yRange = undefined; + + // note: we intentionally don't read the activeContainer before the + // `then` clause to avoid any races due to quickly switching windows. + this.layoutService.whenActiveContainerStylesLoaded.then(() => { + if (this.isBuilt) { + this.layoutService.activeContainer.appendChild(this.$el); + this.setCoordinates(); + } + + resizeListener.value = this._register(dom.addDisposableListener( + dom.getWindow(this.layoutService.activeContainer), dom.EventType.RESIZE, () => this.setYCoordinate())); + }); + })); } private storePosition(): void { - const left = dom.getComputedStyle(this.$el).left; - if (left) { - const position = parseFloat(left) / mainWindow.innerWidth; - this.storageService.store(DEBUG_TOOLBAR_POSITION_KEY, position, StorageScope.PROFILE, StorageTarget.MACHINE); - } - if (this.yCoordinate) { + const activeWindow = dom.getWindow(this.layoutService.activeContainer); + const isMainWindow = this.layoutService.activeContainer === this.layoutService.mainContainer; + + const left = this.$el.getBoundingClientRect().left / activeWindow.innerWidth; + if (isMainWindow) { + this.storageService.store(DEBUG_TOOLBAR_POSITION_KEY, left, StorageScope.PROFILE, StorageTarget.MACHINE); this.storageService.store(DEBUG_TOOLBAR_Y_KEY, this.yCoordinate, StorageScope.PROFILE, StorageTarget.MACHINE); } else { - this.storageService.remove(DEBUG_TOOLBAR_Y_KEY, StorageScope.PROFILE); + this.auxWindowCoordinates.set(activeWindow, { x: left, y: this.yCoordinate }); } } @@ -222,20 +244,30 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { if (!this.isVisible) { return; } + const widgetWidth = this.$el.clientWidth; + const currentWindow = dom.getWindow(this.layoutService.activeContainer); + const isMainWindow = currentWindow === mainWindow; + if (x === undefined) { - const positionPercentage = this.storageService.get(DEBUG_TOOLBAR_POSITION_KEY, StorageScope.PROFILE); - x = positionPercentage !== undefined ? parseFloat(positionPercentage) * mainWindow.innerWidth : (0.5 * mainWindow.innerWidth - 0.5 * widgetWidth); + const positionPercentage = isMainWindow + ? Number(this.storageService.get(DEBUG_TOOLBAR_POSITION_KEY, StorageScope.PROFILE)) + : this.auxWindowCoordinates.get(currentWindow)?.x; + x = positionPercentage !== undefined + ? positionPercentage * currentWindow.innerWidth + : (0.5 * currentWindow.innerWidth - 0.5 * widgetWidth); } - x = Math.max(0, Math.min(x, mainWindow.innerWidth - widgetWidth)); // do not allow the widget to overflow on the right + x = clamp(x, 0, currentWindow.innerWidth - widgetWidth); // do not allow the widget to overflow on the right this.$el.style.left = `${x}px`; if (y === undefined) { - y = this.storageService.getNumber(DEBUG_TOOLBAR_Y_KEY, StorageScope.PROFILE, 0); + y = isMainWindow + ? this.storageService.getNumber(DEBUG_TOOLBAR_Y_KEY, StorageScope.PROFILE) + : this.auxWindowCoordinates.get(currentWindow)?.y; } - this.setYCoordinate(y); + this.setYCoordinate(y || 0); } private setYCoordinate(y = this.yCoordinate): void { @@ -248,7 +280,7 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { private _yRange: [number, number] | undefined; private get yRange(): [number, number] { if (!this._yRange) { - const isTitleBarVisible = this.layoutService.isVisible(Parts.TITLEBAR_PART, mainWindow); + const isTitleBarVisible = this.layoutService.isVisible(Parts.TITLEBAR_PART, dom.getWindow(this.layoutService.activeContainer)); const yMin = isTitleBarVisible ? 0 : this.layoutService.mainContainerOffset.top; let yMax = 0; @@ -275,7 +307,7 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution { } if (!this.isBuilt) { this.isBuilt = true; - this.layoutService.mainContainer.appendChild(this.$el); + this.layoutService.activeContainer.appendChild(this.$el); } this.isVisible = true; diff --git a/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css b/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css index 4ae58e118a1..b2eaa27034a 100644 --- a/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css +++ b/src/vs/workbench/contrib/extensions/browser/media/extensionActions.css @@ -10,12 +10,12 @@ text-overflow: ellipsis; } -.monaco-action-bar .action-item>.action-label.extension-action.label, -.monaco-action-bar .action-dropdown-item>.action-label.extension-action.label { +.monaco-action-bar .action-item > .action-label.extension-action.label, +.monaco-action-bar .action-dropdown-item > .action-label.extension-action.label { padding: 0 5px; } -.monaco-action-bar .action-dropdown-item>.monaco-dropdown .action-label { +.monaco-action-bar .action-dropdown-item > .monaco-dropdown .action-label { padding: 0; } @@ -36,7 +36,7 @@ } .monaco-action-bar .action-item .action-label.extension-action.label, -.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator { +.monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator { background-color: var(--vscode-extensionButton-background) !important; } @@ -48,12 +48,12 @@ background-color: var(--vscode-extensionButton-hoverBackground) !important; } -.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator>div { +.monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator > div { background-color: var(--vscode-extensionButton-separator); } .monaco-action-bar .action-item .action-label.extension-action.label.prominent, -.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator.prominent { +.monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator.prominent { background-color: var(--vscode-extensionButton-prominentBackground); } @@ -69,7 +69,7 @@ border: 1px solid var(--vscode-contrastBorder); } -.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator { +.monaco-action-bar .action-item.action-dropdown-item > .action-dropdown-item-separator { border-top: 1px solid var(--vscode-contrastBorder); border-bottom: 1px solid var(--vscode-contrastBorder); } diff --git a/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css b/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css index e1c4ea5afd2..7187efb1757 100644 --- a/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css +++ b/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css @@ -31,7 +31,7 @@ text-align: right; } -.runtime-extensions-editor .extension .desc>.msg>span:not(:last-child)::after { +.runtime-extensions-editor .extension .desc > .msg > span:not(:last-child)::after { content: '\2022'; padding: 0 4px; opacity: .8; diff --git a/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts b/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts index 3f4b1910cf4..dd25f4509bc 100644 --- a/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts +++ b/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts @@ -9,7 +9,7 @@ import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { AbstractTextResourceEditorInput } from 'vs/workbench/common/editor/textResourceEditorInput'; import { ITextResourceEditorInput } from 'vs/platform/editor/common/editor'; import { BinaryEditorModel } from 'vs/workbench/common/editor/binaryEditorModel'; -import { ByteSize, IFileReadLimits, IFileService, getLargeFileConfirmationLimit } from 'vs/platform/files/common/files'; +import { IFileService } from 'vs/platform/files/common/files'; import { ITextFileService, TextFileEditorModelState, TextFileResolveReason, TextFileOperationError, TextFileOperationResult, ITextFileEditorModel, EncodingMode } from 'vs/workbench/services/textfile/common/textfiles'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IReference, dispose, DisposableStore } from 'vs/base/common/lifecycle'; @@ -24,7 +24,6 @@ import { Schemas } from 'vs/base/common/network'; import { createTextBufferFactory } from 'vs/editor/common/model/textModel'; import { IPathService } from 'vs/workbench/services/path/common/pathService'; import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; -import { isConfigured } from 'vs/platform/configuration/common/configuration'; import { IMarkdownString } from 'vs/base/common/htmlContent'; const enum ForceOpenAs { @@ -99,9 +98,9 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, @IEditorService editorService: IEditorService, @IPathService private readonly pathService: IPathService, - @ITextResourceConfigurationService private readonly textResourceConfigurationService: ITextResourceConfigurationService + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(resource, preferredResource, editorService, textFileService, labelService, fileService, filesConfigurationService); + super(resource, preferredResource, editorService, textFileService, labelService, fileService, filesConfigurationService, textResourceConfigurationService); this.model = this.textFileService.files.get(resource); @@ -396,29 +395,6 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements } } - private ensureLimits(options?: IFileEditorInputOptions): IFileReadLimits | undefined { - if (options?.limits) { - return options.limits; // respect passed in limits if any - } - - // We want to determine the large file configuration based on the best defaults - // for the resource but also respecting user settings. We only apply user settings - // if explicitly configured by the user. Otherwise we pick the best limit for the - // resource scheme. - - const defaultSizeLimit = getLargeFileConfirmationLimit(this.resource); - let configuredSizeLimit: number | undefined = undefined; - - const configuredSizeLimitMb = this.textResourceConfigurationService.inspect(this.resource, null, 'workbench.editorLargeFileConfirmation'); - if (isConfigured(configuredSizeLimitMb)) { - configuredSizeLimit = configuredSizeLimitMb.value * ByteSize.MB; // normalize to MB - } - - return { - size: configuredSizeLimit ?? defaultSizeLimit - }; - } - private async doResolveAsBinary(): Promise { const model = this.instantiationService.createInstance(BinaryEditorModel, this.preferredResource, this.getName()); await model.resolve(); diff --git a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts index 5f1ccf45830..5b064b6c620 100644 --- a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts +++ b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts @@ -37,7 +37,7 @@ import { OpenRecentAction } from 'vs/workbench/browser/actions/windowActions'; import { isMacintosh, isWeb } from 'vs/base/common/platform'; import { Codicon } from 'vs/base/common/codicons'; import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; -import { focusWindow, isMouseEvent } from 'vs/base/browser/dom'; +import { isMouseEvent } from 'vs/base/browser/dom'; const explorerViewIcon = registerIcon('explorer-view-icon', Codicon.files, localize('explorerViewIcon', 'View icon of the explorer view.')); const openEditorsViewIcon = registerIcon('open-editors-view-icon', Codicon.book, localize('openEditorsIcon', 'View icon of the open editors view.')); @@ -239,7 +239,6 @@ export class ExplorerViewPaneContainer extends ViewPaneContainer { explorerView.setExpanded(true); } if (explorerView?.isExpanded()) { - focusWindow(explorerView.element); explorerView.focus(); } else { super.focus(); diff --git a/src/vs/workbench/contrib/format/browser/formatActionsMultiple.ts b/src/vs/workbench/contrib/format/browser/formatActionsMultiple.ts index f84ae6738e4..ca4254400e7 100644 --- a/src/vs/workbench/contrib/format/browser/formatActionsMultiple.ts +++ b/src/vs/workbench/contrib/format/browser/formatActionsMultiple.ts @@ -12,7 +12,7 @@ import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { formatDocumentRangesWithProvider, formatDocumentWithProvider, getRealAndSyntheticDocumentFormattersOrdered, FormattingConflicts, FormattingMode } from 'vs/editor/contrib/format/browser/format'; +import { formatDocumentRangesWithProvider, formatDocumentWithProvider, getRealAndSyntheticDocumentFormattersOrdered, FormattingConflicts, FormattingMode, FormattingKind } from 'vs/editor/contrib/format/browser/format'; import { Range } from 'vs/editor/common/core/range'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; @@ -61,7 +61,7 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { ) { super(); this._store.add(this._extensionService.onDidChangeExtensions(this._updateConfigValues, this)); - this._store.add(FormattingConflicts.setFormatterSelector((formatter, document, mode) => this._selectFormatter(formatter, document, mode))); + this._store.add(FormattingConflicts.setFormatterSelector((formatter, document, mode, kind) => this._selectFormatter(formatter, document, mode, kind))); this._store.add(_editorService.onDidActiveEditorChange(this._updateStatus, this)); this._store.add(_languageFeaturesService.documentFormattingEditProvider.onDidChange(this._updateStatus, this)); this._store.add(_languageFeaturesService.documentRangeFormattingEditProvider.onDidChange(this._updateStatus, this)); @@ -107,7 +107,7 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { return s.match(/\s/) ? `'${s}'` : s; } - private async _analyzeFormatter(formatter: T[], document: ITextModel): Promise { + private async _analyzeFormatter(kind: FormattingKind, formatter: T[], document: ITextModel): Promise { const defaultFormatterId = this._configService.getValue(DefaultFormatter.configName, { resource: document.uri, overrideIdentifier: document.getLanguageId() @@ -126,7 +126,9 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { if (extension && this._extensionEnablementService.isEnabled(toExtension(extension))) { // formatter does not target this file const langName = this._languageService.getLanguageName(document.getLanguageId()) || document.getLanguageId(); - const detail = nls.localize('miss', "Extension '{0}' is configured as formatter but it cannot format '{1}'-files", extension.displayName || extension.name, langName); + const detail = kind === FormattingKind.File + ? nls.localize('miss.1', "Extension '{0}' is configured as formatter but it cannot format '{1}'-files", extension.displayName || extension.name, langName) + : nls.localize('miss.2', "Extension '{0}' is configured as formatter but it can only format '{1}'-files as a whole, not selections or parts of it.", extension.displayName || extension.name, langName); return detail; } @@ -143,8 +145,8 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { return message; } - private async _selectFormatter(formatter: T[], document: ITextModel, mode: FormattingMode): Promise { - const formatterOrMessage = await this._analyzeFormatter(formatter, document); + private async _selectFormatter(formatter: T[], document: ITextModel, mode: FormattingMode, kind: FormattingKind): Promise { + const formatterOrMessage = await this._analyzeFormatter(kind, formatter, document); if (typeof formatterOrMessage !== 'string') { return formatterOrMessage; } @@ -153,7 +155,7 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { // running from a user action -> show modal dialog so that users configure // a default formatter const { confirmed } = await this._dialogService.confirm({ - message: nls.localize('miss.1', "Configure Default Formatter"), + message: nls.localize('miss', "Configure Default Formatter"), detail: formatterOrMessage, primaryButton: nls.localize({ key: 'do.config', comment: ['&& denotes a mnemonic'] }, "&&Configure...") }); @@ -213,7 +215,7 @@ class DefaultFormatter extends Disposable implements IWorkbenchContribution { const cts = new CancellationTokenSource(); this._languageStatusStore.add(toDisposable(() => cts.dispose(true))); - this._analyzeFormatter(formatter, document).then(result => { + this._analyzeFormatter(FormattingKind.File, formatter, document).then(result => { if (cts.token.isCancellationRequested) { return; } diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChat.css b/src/vs/workbench/contrib/inlineChat/browser/inlineChat.css index 6d16be3ce3a..9e4e77cfe38 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChat.css +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChat.css @@ -93,7 +93,7 @@ } /* UGLY - fighting against workbench styles */ -.monaco-workbench .part.editor>.content .monaco-editor .inline-chat .progress .monaco-progress-container { +.monaco-workbench .part.editor > .content .monaco-editor .inline-chat .progress .monaco-progress-container { top: 0; } diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.ts index e352642e2d6..90d658b07d0 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatStrategies.ts @@ -900,6 +900,10 @@ export class LiveStrategy3 extends EditModeStrategy { } : undefined; + this._sessionStore.add(this._session.textModelN.onDidChangeContent(e => { + this._showDiff(true, true); + })); + const zoneLineNumber = this._zone.position!.lineNumber; const myDistance = zoneLineNumber <= modifiedRange.startLineNumber ? modifiedRange.startLineNumber - zoneLineNumber diff --git a/src/vs/workbench/contrib/interactive/browser/interactive.contribution.ts b/src/vs/workbench/contrib/interactive/browser/interactive.contribution.ts index 92add5ea20e..24ca46450ed 100644 --- a/src/vs/workbench/contrib/interactive/browser/interactive.contribution.ts +++ b/src/vs/workbench/contrib/interactive/browser/interactive.contribution.ts @@ -34,8 +34,7 @@ import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiati import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { ILogService } from 'vs/platform/log/common/log'; import { Registry } from 'vs/platform/registry/common/platform'; -import { contrastBorder, listInactiveSelectionBackground, registerColor, transparent } from 'vs/platform/theme/common/colorRegistry'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; +import { contrastBorder, ifDefinedThenElse, listInactiveSelectionBackground, registerColor } from 'vs/platform/theme/common/colorRegistry'; import { EditorPaneDescriptor, IEditorPaneRegistry } from 'vs/workbench/browser/editor'; import { Extensions as WorkbenchExtensions, IWorkbenchContribution, IWorkbenchContributionsRegistry } from 'vs/workbench/common/contributions'; import { EditorExtensions, EditorsOrder, IEditorFactoryRegistry, IEditorSerializer, IUntypedEditorInput } from 'vs/workbench/common/editor'; @@ -759,33 +758,20 @@ registerAction2(class extends Action2 { } }); -registerThemingParticipant((theme) => { - registerColor('interactive.activeCodeBorder', { - dark: theme.getColor(peekViewBorder) ?? '#007acc', - light: theme.getColor(peekViewBorder) ?? '#007acc', - hcDark: contrastBorder, - hcLight: contrastBorder - }, localize('interactive.activeCodeBorder', 'The border color for the current interactive code cell when the editor has focus.')); +registerColor('interactive.activeCodeBorder', { + dark: ifDefinedThenElse(peekViewBorder, peekViewBorder, '#007acc'), + light: ifDefinedThenElse(peekViewBorder, peekViewBorder, '#007acc'), + hcDark: contrastBorder, + hcLight: contrastBorder +}, localize('interactive.activeCodeBorder', 'The border color for the current interactive code cell when the editor has focus.')); - // registerColor('interactive.activeCodeBackground', { - // dark: (theme.getColor(peekViewEditorBackground) ?? Color.fromHex('#001F33')).transparent(0.25), - // light: (theme.getColor(peekViewEditorBackground) ?? Color.fromHex('#F2F8FC')).transparent(0.25), - // hc: Color.black - // }, localize('interactive.activeCodeBackground', 'The background color for the current interactive code cell when the editor has focus.')); - - registerColor('interactive.inactiveCodeBorder', { - dark: theme.getColor(listInactiveSelectionBackground) ?? transparent(listInactiveSelectionBackground, 1), - light: theme.getColor(listInactiveSelectionBackground) ?? transparent(listInactiveSelectionBackground, 1), - hcDark: PANEL_BORDER, - hcLight: PANEL_BORDER - }, localize('interactive.inactiveCodeBorder', 'The border color for the current interactive code cell when the editor does not have focus.')); - - // registerColor('interactive.inactiveCodeBackground', { - // dark: (theme.getColor(peekViewResultsBackground) ?? Color.fromHex('#252526')).transparent(0.25), - // light: (theme.getColor(peekViewResultsBackground) ?? Color.fromHex('#F3F3F3')).transparent(0.25), - // hc: Color.black - // }, localize('interactive.inactiveCodeBackground', 'The backgorund color for the current interactive code cell when the editor does not have focus.')); -}); +registerColor('interactive.inactiveCodeBorder', { + //dark: theme.getColor(listInactiveSelectionBackground) ?? transparent(listInactiveSelectionBackground, 1), + dark: ifDefinedThenElse(listInactiveSelectionBackground, listInactiveSelectionBackground, '#37373D'), + light: ifDefinedThenElse(listInactiveSelectionBackground, listInactiveSelectionBackground, '#E4E6F1'), + hcDark: PANEL_BORDER, + hcLight: PANEL_BORDER +}, localize('interactive.inactiveCodeBorder', 'The border color for the current interactive code cell when the editor does not have focus.')); Registry.as(ConfigurationExtensions.Configuration).registerConfiguration({ id: 'interactiveWindow', diff --git a/src/vs/workbench/contrib/languageStatus/browser/media/languageStatus.css b/src/vs/workbench/contrib/languageStatus/browser/media/languageStatus.css index da152cb9208..f7fb23f59c6 100644 --- a/src/vs/workbench/contrib/languageStatus/browser/media/languageStatus.css +++ b/src/vs/workbench/contrib/languageStatus/browser/media/languageStatus.css @@ -25,7 +25,7 @@ } } -.monaco-workbench .statusbar DIV#status\.languageStatus A>SPAN.codicon.wiggle { +.monaco-workbench .statusbar DIV#status\.languageStatus A > SPAN.codicon.wiggle { animation-duration: .8s; animation-iteration-count: 1; animation-name: wiggle; @@ -62,60 +62,60 @@ border-bottom: 1px solid var(--vscode-notifications-border); } -.monaco-workbench .hover-language-status>.severity { +.monaco-workbench .hover-language-status > .severity { padding-right: 8px; flex: 1; margin: auto; display: none; } -.monaco-workbench .hover-language-status>.severity.sev3 { +.monaco-workbench .hover-language-status > .severity.sev3 { color: var(--vscode-notificationsErrorIcon-foreground) } -.monaco-workbench .hover-language-status>.severity.sev2 { +.monaco-workbench .hover-language-status > .severity.sev2 { color: var(--vscode-notificationsInfoIcon-foreground) } -.monaco-workbench .hover-language-status>.severity.show { +.monaco-workbench .hover-language-status > .severity.show { display: inherit; } -.monaco-workbench .hover-language-status>.element { +.monaco-workbench .hover-language-status > .element { display: flex; justify-content: space-between; vertical-align: middle; flex-grow: 100; } -.monaco-workbench .hover-language-status>.element>.left>.detail:not(:empty)::before { +.monaco-workbench .hover-language-status > .element > .left > .detail:not(:empty)::before { content: '\2013'; padding: 0 4px; opacity: 0.6; } -.monaco-workbench .hover-language-status>.element>.left>.label:empty { +.monaco-workbench .hover-language-status > .element > .left > .label:empty { display: none; } -.monaco-workbench .hover-language-status>.element .left { +.monaco-workbench .hover-language-status > .element .left { margin: auto 0; } -.monaco-workbench .hover-language-status>.element .right { +.monaco-workbench .hover-language-status > .element .right { margin: auto 0; display: flex; } -.monaco-workbench .hover-language-status>.element .right:not(:empty) { +.monaco-workbench .hover-language-status > .element .right:not(:empty) { padding-left: 16px; } -.monaco-workbench .hover-language-status>.element .right .monaco-link { +.monaco-workbench .hover-language-status > .element .right .monaco-link { margin: auto 0; white-space: nowrap; } -.monaco-workbench .hover-language-status>.element .right .monaco-action-bar:not(:first-child) { +.monaco-workbench .hover-language-status > .element .right .monaco-action-bar:not(:first-child) { padding-left: 8px; } diff --git a/src/vs/workbench/contrib/logs/common/defaultLogLevels.ts b/src/vs/workbench/contrib/logs/common/defaultLogLevels.ts index c942cccb779..9feccec6965 100644 --- a/src/vs/workbench/contrib/logs/common/defaultLogLevels.ts +++ b/src/vs/workbench/contrib/logs/common/defaultLogLevels.ts @@ -29,6 +29,8 @@ export interface IDefaultLogLevelsService { getDefaultLogLevels(): Promise; setDefaultLogLevel(logLevel: LogLevel, extensionId?: string): Promise; + + migrateLogLevels(): void; } class DefaultLogLevelsService implements IDefaultLogLevelsService { @@ -98,37 +100,53 @@ class DefaultLogLevelsService implements IDefaultLogLevelsService { logLevelsValue.push(LogLevelToString(logLevels.default)); } for (const [extension, logLevel] of logLevels.extensions ?? []) { - logLevelsValue.push(`${extension}:${LogLevelToString(logLevel)}`); + logLevelsValue.push(`${extension}=${LogLevelToString(logLevel)}`); } await this.jsonEditingService.write(this.environmentService.argvResource, [{ path: ['log-level'], value: logLevelsValue.length ? logLevelsValue : undefined }], true); } private async _parseLogLevelsFromArgv(): Promise { const result: ParsedArgvLogLevels = { extensions: [] }; + const logLevels = await this._readLogLevelsFromArgv(); + for (const extensionLogLevel of logLevels) { + const matches = EXTENSION_IDENTIFIER_WITH_LOG_REGEX.exec(extensionLogLevel); + if (matches && matches[1] && matches[2]) { + const logLevel = parseLogLevel(matches[2]); + if (!isUndefined(logLevel)) { + result.extensions?.push([matches[1].toLowerCase(), logLevel]); + } + } else { + const logLevel = parseLogLevel(extensionLogLevel); + if (!isUndefined(logLevel)) { + result.default = logLevel; + } + } + } + return !isUndefined(result.default) || result.extensions?.length ? result : undefined; + } + + async migrateLogLevels(): Promise { + const logLevels = await this._readLogLevelsFromArgv(); + const regex = /^([^.]+\..+):(.+)$/; + if (logLevels.some(extensionLogLevel => regex.test(extensionLogLevel))) { + const argvLogLevel = await this._parseLogLevelsFromArgv(); + if (argvLogLevel) { + await this._writeLogLevelsToArgv(argvLogLevel); + } + } + } + + private async _readLogLevelsFromArgv(): Promise { try { const content = await this.fileService.readFile(this.environmentService.argvResource); const argv: { 'log-level'?: string | string[] } = parse(content.value.toString()); - const logLevels = isString(argv['log-level']) ? [argv['log-level']] : Array.isArray(argv['log-level']) ? argv['log-level'] : []; - for (const extensionLogLevel of logLevels) { - const matches = EXTENSION_IDENTIFIER_WITH_LOG_REGEX.exec(extensionLogLevel); - if (matches && matches[1] && matches[2]) { - const logLevel = parseLogLevel(matches[2]); - if (!isUndefined(logLevel)) { - result.extensions?.push([matches[1].toLowerCase(), logLevel]); - } - } else { - const logLevel = parseLogLevel(extensionLogLevel); - if (!isUndefined(logLevel)) { - result.default = logLevel; - } - } - } + return isString(argv['log-level']) ? [argv['log-level']] : Array.isArray(argv['log-level']) ? argv['log-level'] : []; } catch (error) { if (toFileOperationResult(error) !== FileOperationResult.FILE_NOT_FOUND) { this.logService.error(error); } } - return !isUndefined(result.default) || result.extensions?.length ? result : undefined; + return []; } private _getDefaultLogLevelFromEnv(): LogLevel { diff --git a/src/vs/workbench/contrib/logs/common/logs.contribution.ts b/src/vs/workbench/contrib/logs/common/logs.contribution.ts index 59581610f9b..2b5ec6c3cfe 100644 --- a/src/vs/workbench/contrib/logs/common/logs.contribution.ts +++ b/src/vs/workbench/contrib/logs/common/logs.contribution.ts @@ -213,4 +213,13 @@ class LogOutputChannels extends Disposable implements IWorkbenchContribution { } +class LogLevelMigration implements IWorkbenchContribution { + constructor( + @IDefaultLogLevelsService defaultLogLevelsService: IDefaultLogLevelsService + ) { + defaultLogLevelsService.migrateLogLevels(); + } +} + Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(LogOutputChannels, LifecyclePhase.Restored); +Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(LogLevelMigration, LifecyclePhase.Eventually); diff --git a/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts b/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts index e9f69bfa0ad..3304f0b90b7 100644 --- a/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts +++ b/src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInput.ts @@ -8,6 +8,7 @@ import { autorun } from 'vs/base/common/observable'; import { isEqual } from 'vs/base/common/resources'; import { isDefined } from 'vs/base/common/types'; import { URI } from 'vs/base/common/uri'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; import { localize } from 'vs/nls'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IFileService } from 'vs/platform/files/common/files'; @@ -60,9 +61,10 @@ export class MergeEditorInput extends AbstractTextResourceEditorInput implements @ILabelService labelService: ILabelService, @IFileService fileService: IFileService, @IConfigurationService private readonly configurationService: IConfigurationService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(result, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService); + super(result, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService, textResourceConfigurationService); } override dispose(): void { diff --git a/src/vs/workbench/contrib/notebook/browser/media/notebook.css b/src/vs/workbench/contrib/notebook/browser/media/notebook.css index c22bc652ca7..309b3b4ef84 100644 --- a/src/vs/workbench/contrib/notebook/browser/media/notebook.css +++ b/src/vs/workbench/contrib/notebook/browser/media/notebook.css @@ -258,7 +258,7 @@ text-align: center; } -.monaco-workbench .notebookOverlay>.cell-list-container>.monaco-list>.monaco-scrollable-element>.monaco-list-rows>.monaco-list-row .cell-statusbar-hidden .execution-count-label { +.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .cell-statusbar-hidden .execution-count-label { line-height: 15px; } diff --git a/src/vs/workbench/contrib/notebook/browser/media/notebookCellChat.css b/src/vs/workbench/contrib/notebook/browser/media/notebookCellChat.css index 5c0081e507d..fda2877f566 100644 --- a/src/vs/workbench/contrib/notebook/browser/media/notebookCellChat.css +++ b/src/vs/workbench/contrib/notebook/browser/media/notebookCellChat.css @@ -97,7 +97,7 @@ } /* UGLY - fighting against workbench styles */ -.monaco-workbench .part.editor>.content .monaco-editor .inline-chat .progress .monaco-progress-container { +.monaco-workbench .part.editor > .content .monaco-editor .inline-chat .progress .monaco-progress-container { top: 0; } diff --git a/src/vs/workbench/contrib/notebook/browser/media/notebookFolding.css b/src/vs/workbench/contrib/notebook/browser/media/notebookFolding.css index 8dc8d7eb123..7433c9a7eb2 100644 --- a/src/vs/workbench/contrib/notebook/browser/media/notebookFolding.css +++ b/src/vs/workbench/contrib/notebook/browser/media/notebookFolding.css @@ -43,7 +43,7 @@ padding: 4px 4px 4px 4px; } -.monaco-workbench .notebookOverlay>.cell-list-container .notebook-folded-hint { +.monaco-workbench .notebookOverlay > .cell-list-container .notebook-folded-hint { position: absolute; user-select: none; } diff --git a/src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts b/src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts index 61b361aac83..8fa9bf480d8 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookBrowser.ts @@ -158,6 +158,7 @@ export interface IFocusNotebookCellOptions { readonly revealBehavior?: ScrollToRevealBehavior | undefined; readonly outputId?: string; readonly altOutputId?: string; + readonly outputWebviewFocused?: boolean; } //#endregion diff --git a/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts b/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts index 7bcd5a348d9..2370b8a2972 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookEditor.ts @@ -17,14 +17,14 @@ import { ITextResourceConfigurationService } from 'vs/editor/common/services/tex import { localize } from 'vs/nls'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { IFileService } from 'vs/platform/files/common/files'; +import { ByteSize, FileOperationError, FileOperationResult, IFileService, TooLargeFileOperationError } from 'vs/platform/files/common/files'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; 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 { Selection } from 'vs/editor/common/core/selection'; import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane'; -import { DEFAULT_EDITOR_ASSOCIATION, EditorPaneSelectionChangeReason, EditorPaneSelectionCompareResult, EditorResourceAccessor, IEditorMemento, IEditorOpenContext, IEditorPaneSelection, IEditorPaneSelectionChangeEvent, createEditorOpenError, isEditorOpenError } from 'vs/workbench/common/editor'; +import { DEFAULT_EDITOR_ASSOCIATION, EditorPaneSelectionChangeReason, EditorPaneSelectionCompareResult, EditorResourceAccessor, IEditorMemento, IEditorOpenContext, IEditorPaneSelection, IEditorPaneSelectionChangeEvent, createEditorOpenError, createTooLargeFileError, isEditorOpenError } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { SELECT_KERNEL_ID } from 'vs/workbench/contrib/notebook/browser/controller/coreActions'; import { INotebookEditorOptions, INotebookEditorPane, INotebookEditorViewState } from 'vs/workbench/contrib/notebook/browser/notebookBrowser'; @@ -46,6 +46,7 @@ import { IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/com import { streamToBuffer } from 'vs/base/common/buffer'; import { ILogService } from 'vs/platform/log/common/log'; import { INotebookEditorWorkerService } from 'vs/workbench/contrib/notebook/common/services/notebookWorkerService'; +import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; const NOTEBOOK_EDITOR_VIEW_STATE_PREFERENCE_KEY = 'NotebookEditorViewState'; @@ -90,6 +91,7 @@ export class NotebookEditor extends EditorPane implements INotebookEditorPane { @IWorkingCopyBackupService private readonly _workingCopyBackupService: IWorkingCopyBackupService, @ILogService private readonly logService: ILogService, @INotebookEditorWorkerService private readonly _notebookEditorWorkerService: INotebookEditorWorkerService, + @IPreferencesService private readonly _preferencesService: IPreferencesService, ) { super(NotebookEditor.ID, telemetryService, themeService, storageService); this._editorMemento = this.getEditorMemento(_editorGroupService, configurationService, NOTEBOOK_EDITOR_VIEW_STATE_PREFERENCE_KEY); @@ -327,6 +329,18 @@ export class NotebookEditor extends EditorPane implements INotebookEditorPane { throw e; } + // Handle case where a file is too large to open without confirmation + if ((e).fileOperationResult === FileOperationResult.FILE_TOO_LARGE && this.group) { + let message: string; + if (e instanceof TooLargeFileOperationError) { + message = localize('notebookTooLargeForHeapErrorWithSize', "The notebook is not displayed in the notebook editor because it is very large ({0}).", ByteSize.formatSize(e.size)); + } else { + message = localize('notebookTooLargeForHeapErrorWithoutSize', "The notebook is not displayed in the notebook editor because it is very large."); + } + + throw createTooLargeFileError(this.group, input, options, message, this._preferencesService); + } + const error = createEditorOpenError(e instanceof Error ? e : new Error((e ? e.message : '')), [ toAction({ id: 'workbench.notebook.action.openInTextEditor', label: localize('notebookOpenInTextEditor', "Open in Text Editor"), run: async () => { diff --git a/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts b/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts index 4957ab3e2f2..745adff1205 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookEditorWidget.ts @@ -2371,7 +2371,7 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditorD } const focusElementId = options?.outputId ?? cell.id; - this._webview.focusOutput(focusElementId, options?.altOutputId, this._webviewFocused); + this._webview.focusOutput(focusElementId, options?.altOutputId, options?.outputWebviewFocused || this._webviewFocused); cell.updateEditState(CellEditState.Preview, 'focusNotebookCell'); cell.focusMode = CellFocusMode.Output; diff --git a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts index 4c559a6d359..83a3f715efd 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView.ts @@ -663,7 +663,7 @@ export class BackLayerWebView extends Themable { const latestCell = this.notebookEditor.getCellByInfo(resolvedResult.cellInfo); if (latestCell) { latestCell.outputIsFocused = true; - this.notebookEditor.focusNotebookCell(latestCell, 'output', { skipReveal: true }); + this.notebookEditor.focusNotebookCell(latestCell, 'output', { skipReveal: true, outputWebviewFocused: true }); } } break; diff --git a/src/vs/workbench/contrib/notebook/common/notebookCommon.ts b/src/vs/workbench/contrib/notebook/common/notebookCommon.ts index 99230c87970..e88290fa063 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookCommon.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookCommon.ts @@ -30,6 +30,7 @@ import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/no import { ICellRange } from 'vs/workbench/contrib/notebook/common/notebookRange'; import { IWorkingCopyBackupMeta, IWorkingCopySaveEvent } from 'vs/workbench/services/workingCopy/common/workingCopy'; import { IMarkdownString } from 'vs/base/common/htmlContent'; +import { IFileReadLimits } from 'vs/platform/files/common/files'; export const NOTEBOOK_EDITOR_ID = 'workbench.editor.notebook'; export const NOTEBOOK_DIFF_EDITOR_ID = 'workbench.editor.notebookTextDiffEditor'; @@ -787,6 +788,11 @@ export interface INotebookLoadOptions { * Go to disk bypassing any cache of the model if any. */ forceReadFromFile?: boolean; + /** + * If provided, the size of the file will be checked against the limits + * and an error will be thrown if any limit is exceeded. + */ + readonly limits?: IFileReadLimits; } export interface IResolvedNotebookEditorModel extends INotebookEditorModel { diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts index 1d6bba54100..8a0f53e0b8c 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorInput.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as glob from 'vs/base/common/glob'; -import { GroupIdentifier, ISaveOptions, IMoveResult, IRevertOptions, EditorInputCapabilities, Verbosity, IUntypedEditorInput } from 'vs/workbench/common/editor'; +import { GroupIdentifier, ISaveOptions, IMoveResult, IRevertOptions, EditorInputCapabilities, Verbosity, IUntypedEditorInput, IFileLimitedEditorInputOptions } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { INotebookService, SimpleNotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/notebookService'; import { URI } from 'vs/base/common/uri'; @@ -18,7 +18,7 @@ import { ILabelService } from 'vs/platform/label/common/label'; import { Schemas } from 'vs/base/common/network'; import { IFileService } from 'vs/platform/files/common/files'; import { AbstractResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorInput'; -import { IEditorOptions, IResourceEditorInput } from 'vs/platform/editor/common/editor'; +import { IResourceEditorInput } from 'vs/platform/editor/common/editor'; import { onUnexpectedError } from 'vs/base/common/errors'; import { VSBuffer } from 'vs/base/common/buffer'; import { IWorkingCopyIdentifier } from 'vs/workbench/services/workingCopy/common/workingCopy'; @@ -29,6 +29,7 @@ import { IExtensionService } from 'vs/workbench/services/extensions/common/exten import { localize } from 'vs/nls'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IMarkdownString } from 'vs/base/common/htmlContent'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; export interface NotebookEditorInputOptions { startDirty?: boolean; @@ -79,9 +80,10 @@ export class NotebookEditorInput extends AbstractResourceEditorInput { @IFileService fileService: IFileService, @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, @IExtensionService extensionService: IExtensionService, - @IEditorService editorService: IEditorService + @IEditorService editorService: IEditorService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(resource, preferredResource, labelService, fileService, filesConfigurationService); + super(resource, preferredResource, labelService, fileService, filesConfigurationService, textResourceConfigurationService); this._defaultDirtyState = !!options.startDirty; // Automatically resolve this input when the "wanted" model comes to life via @@ -281,7 +283,7 @@ export class NotebookEditorInput extends AbstractResourceEditorInput { } } - override async resolve(_options?: IEditorOptions, perf?: NotebookPerfMarks): Promise { + override async resolve(_options?: IFileLimitedEditorInputOptions, perf?: NotebookPerfMarks): Promise { if (!await this._notebookService.canResolve(this.viewType)) { return null; } @@ -293,7 +295,7 @@ export class NotebookEditorInput extends AbstractResourceEditorInput { this._sideLoadedListener.dispose(); if (!this._editorModelReference) { - const ref = await this._notebookModelResolverService.resolve(this.resource, this.viewType); + const ref = await this._notebookModelResolverService.resolve(this.resource, this.viewType, this.ensureLimits(_options)); if (this._editorModelReference) { // Re-entrant, double resolve happened. Dispose the addition references and proceed // with the truth. @@ -313,7 +315,7 @@ export class NotebookEditorInput extends AbstractResourceEditorInput { this._onDidChangeDirty.fire(); } } else { - this._editorModelReference.object.load(); + this._editorModelReference.object.load({ limits: this.ensureLimits(_options) }); } if (this.options._backupId) { diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts index cb01185b511..4e7864c0667 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorModel.ts @@ -136,7 +136,10 @@ export class SimpleNotebookEditorModel extends EditorModel implements INotebookE } this._workingCopy.onDidRevert(() => this._onDidRevertUntitled.fire()); } else { - this._workingCopy = await this._workingCopyManager.resolve(this.resource, options?.forceReadFromFile ? { reload: { async: false, force: true } } : undefined); + this._workingCopy = await this._workingCopyManager.resolve(this.resource, { + limits: options?.limits, + reload: options?.forceReadFromFile ? { async: false, force: true } : undefined + }); this._workingCopyListeners.add(this._workingCopy.onDidSave(e => this._onDidSave.fire(e))); this._workingCopyListeners.add(this._workingCopy.onDidChangeOrphaned(() => this._onDidChangeOrphaned.fire())); this._workingCopyListeners.add(this._workingCopy.onDidChangeReadonly(() => this._onDidChangeReadonly.fire())); @@ -152,7 +155,8 @@ export class SimpleNotebookEditorModel extends EditorModel implements INotebookE reload: { async: !options?.forceReadFromFile, force: options?.forceReadFromFile - } + }, + limits: options?.limits }); } diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverService.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverService.ts index e2d2a6c4fe4..3eff1eb5060 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverService.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverService.ts @@ -8,6 +8,7 @@ import { URI } from 'vs/base/common/uri'; import { IResolvedNotebookEditorModel } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { IReference } from 'vs/base/common/lifecycle'; import { Event, IWaitUntil } from 'vs/base/common/event'; +import { IFileReadLimits } from 'vs/platform/files/common/files'; export const INotebookEditorModelResolverService = createDecorator('INotebookModelResolverService'); @@ -49,6 +50,6 @@ export interface INotebookEditorModelResolverService { isDirty(resource: URI): boolean; - resolve(resource: URI, viewType?: string): Promise>; - resolve(resource: IUntitledNotebookResource, viewType: string): Promise>; + resolve(resource: URI, viewType?: string, limits?: IFileReadLimits): Promise>; + resolve(resource: IUntitledNotebookResource, viewType: string, limits?: IFileReadLimits): Promise>; } diff --git a/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl.ts b/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl.ts index 9da04357e1b..bbc69d31aa2 100644 --- a/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl.ts +++ b/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl.ts @@ -21,6 +21,7 @@ import { NotebookProviderInfo } from 'vs/workbench/contrib/notebook/common/noteb import { assertIsDefined } from 'vs/base/common/types'; import { CancellationToken } from 'vs/base/common/cancellation'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { IFileReadLimits } from 'vs/platform/files/common/files'; class NotebookModelReferenceCollection extends ReferenceCollection> { @@ -58,7 +59,7 @@ class NotebookModelReferenceCollection extends ReferenceCollection { + protected async createReferencedObject(key: string, viewType: string, hasAssociatedFilePath: boolean, limits?: IFileReadLimits): Promise { // Untrack as being disposed this.modelsToDispose.delete(key); @@ -77,7 +78,7 @@ class NotebookModelReferenceCollection extends ReferenceCollection>; - async resolve(resource: IUntitledNotebookResource, viewType: string): Promise>; - async resolve(arg0: URI | IUntitledNotebookResource, viewType?: string): Promise> { + async resolve(resource: URI, viewType?: string, limits?: IFileReadLimits): Promise>; + async resolve(resource: IUntitledNotebookResource, viewType: string, limits?: IFileReadLimits): Promise>; + async resolve(arg0: URI | IUntitledNotebookResource, viewType?: string, limits?: IFileReadLimits): Promise> { let resource: URI; let hasAssociatedFilePath = false; if (URI.isUri(arg0)) { @@ -235,7 +236,7 @@ export class NotebookModelResolverServiceImpl implements INotebookEditorModelRes } } - const reference = this._data.acquire(resource.toString(), viewType, hasAssociatedFilePath); + const reference = this._data.acquire(resource.toString(), viewType, hasAssociatedFilePath, limits); try { const model = await reference.object; return { diff --git a/src/vs/workbench/contrib/notebook/test/browser/notebookCommon.test.ts b/src/vs/workbench/contrib/notebook/test/browser/notebookCommon.test.ts index 83d0164b035..476c7aa5327 100644 --- a/src/vs/workbench/contrib/notebook/test/browser/notebookCommon.test.ts +++ b/src/vs/workbench/contrib/notebook/test/browser/notebookCommon.test.ts @@ -305,6 +305,8 @@ suite('NotebookCommon', () => { suite('CellUri', function () { + ensureNoDisposablesAreLeakedInTestSuite(); + test('parse, generate (file-scheme)', function () { const nb = URI.parse('file:///bar/følder/file.nb'); @@ -348,6 +350,8 @@ suite('CellUri', function () { suite('CellRange', function () { + ensureNoDisposablesAreLeakedInTestSuite(); + test('Cell range to index', function () { assert.deepStrictEqual(cellRangesToIndexes([]), []); assert.deepStrictEqual(cellRangesToIndexes([{ start: 0, end: 0 }]), []); @@ -398,6 +402,7 @@ suite('CellRange', function () { }); suite('NotebookWorkingCopyTypeIdentifier', function () { + ensureNoDisposablesAreLeakedInTestSuite(); test('works', function () { const viewType = 'testViewType'; diff --git a/src/vs/workbench/contrib/notebook/test/browser/notebookSelection.test.ts b/src/vs/workbench/contrib/notebook/test/browser/notebookSelection.test.ts index b1aa61118fd..a45fd46828f 100644 --- a/src/vs/workbench/contrib/notebook/test/browser/notebookSelection.test.ts +++ b/src/vs/workbench/contrib/notebook/test/browser/notebookSelection.test.ts @@ -15,12 +15,15 @@ import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/uti import { DisposableStore } from 'vs/base/common/lifecycle'; suite('NotebookSelection', () => { + ensureNoDisposablesAreLeakedInTestSuite(); + test('focus is never empty', function () { const selectionCollection = new NotebookCellSelectionCollection(); assert.deepStrictEqual(selectionCollection.focus, { start: 0, end: 0 }); selectionCollection.setState(null, [], true, 'model'); assert.deepStrictEqual(selectionCollection.focus, { start: 0, end: 0 }); + selectionCollection.dispose(); }); }); diff --git a/src/vs/workbench/contrib/output/browser/logViewer.ts b/src/vs/workbench/contrib/output/browser/logViewer.ts deleted file mode 100644 index 8446103f278..00000000000 --- a/src/vs/workbench/contrib/output/browser/logViewer.ts +++ /dev/null @@ -1,48 +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 { IEditorOptions } from 'vs/editor/common/config/editorOptions'; -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 { AbstractTextResourceEditor } from 'vs/workbench/browser/parts/editor/textResourceEditor'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { IEditorConfiguration } from 'vs/workbench/browser/parts/editor/textEditor'; - -export class LogViewer extends AbstractTextResourceEditor { - - static readonly LOG_VIEWER_EDITOR_ID = 'workbench.editors.logViewer'; - - constructor( - @ITelemetryService telemetryService: ITelemetryService, - @IInstantiationService instantiationService: IInstantiationService, - @IStorageService storageService: IStorageService, - @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService, - @IThemeService themeService: IThemeService, - @IEditorGroupsService editorGroupService: IEditorGroupsService, - @IEditorService editorService: IEditorService, - @IFileService fileService: IFileService - ) { - super(LogViewer.LOG_VIEWER_EDITOR_ID, telemetryService, instantiationService, storageService, textResourceConfigurationService, themeService, editorGroupService, editorService, fileService); - } - - protected override getConfigurationOverrides(configuration: IEditorConfiguration): IEditorOptions { - const options = super.getConfigurationOverrides(configuration); - options.wordWrap = 'off'; // all log viewers do not wrap - options.folding = false; - options.scrollBeyondLastLine = false; - options.renderValidationDecorations = 'editable'; - return options; - } - - protected getAriaLabel(): string { - return localize('logViewerAriaLabel', "Log viewer"); - } -} diff --git a/src/vs/workbench/contrib/output/browser/output.contribution.ts b/src/vs/workbench/contrib/output/browser/output.contribution.ts index 358b67f43e6..71b27b54876 100644 --- a/src/vs/workbench/contrib/output/browser/output.contribution.ts +++ b/src/vs/workbench/contrib/output/browser/output.contribution.ts @@ -10,7 +10,7 @@ import { Registry } from 'vs/platform/registry/common/platform'; import { MenuId, registerAction2, Action2, MenuRegistry } from 'vs/platform/actions/common/actions'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { OutputService } from 'vs/workbench/contrib/output/browser/outputServices'; -import { OUTPUT_MODE_ID, OUTPUT_MIME, OUTPUT_VIEW_ID, IOutputService, CONTEXT_IN_OUTPUT, LOG_MODE_ID, LOG_MIME, CONTEXT_ACTIVE_LOG_OUTPUT, CONTEXT_OUTPUT_SCROLL_LOCK, IOutputChannelDescriptor, IFileOutputChannelDescriptor, ACTIVE_OUTPUT_CHANNEL_CONTEXT, IOutputChannelRegistry, Extensions } from 'vs/workbench/services/output/common/output'; +import { OUTPUT_MODE_ID, OUTPUT_MIME, OUTPUT_VIEW_ID, IOutputService, CONTEXT_IN_OUTPUT, LOG_MODE_ID, LOG_MIME, CONTEXT_ACTIVE_FILE_OUTPUT, CONTEXT_OUTPUT_SCROLL_LOCK, IOutputChannelDescriptor, IFileOutputChannelDescriptor, ACTIVE_OUTPUT_CHANNEL_CONTEXT, IOutputChannelRegistry, Extensions } from 'vs/workbench/services/output/common/output'; import { OutputViewPane } from 'vs/workbench/contrib/output/browser/outputView'; import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions'; @@ -93,7 +93,7 @@ class OutputContribution extends Disposable implements IWorkbenchContribution { this.registerShowOutputChannelsAction(); this.registerClearOutputAction(); this.registerToggleAutoScrollAction(); - this.registerOpenActiveLogOutputFileAction(); + this.registerOpenActiveOutputFileAction(); this.registerShowLogsAction(); this.registerOpenLogFileAction(); } @@ -259,12 +259,12 @@ class OutputContribution extends Disposable implements IWorkbenchContribution { })); } - private registerOpenActiveLogOutputFileAction(): void { + private registerOpenActiveOutputFileAction(): void { this._register(registerAction2(class extends Action2 { constructor() { super({ id: `workbench.action.openActiveLogOutputFile`, - title: nls.localize2('openActiveLogOutputFile', "Open Log Output File"), + title: nls.localize2('openActiveOutputFile', "Open Output as Editor"), menu: [{ id: MenuId.ViewTitle, when: ContextKeyExpr.equals('view', OUTPUT_VIEW_ID), @@ -272,29 +272,29 @@ class OutputContribution extends Disposable implements IWorkbenchContribution { order: 4 }], icon: Codicon.goToFile, - precondition: CONTEXT_ACTIVE_LOG_OUTPUT + precondition: CONTEXT_ACTIVE_FILE_OUTPUT }); } async run(accessor: ServicesAccessor): Promise { const outputService = accessor.get(IOutputService); const editorService = accessor.get(IEditorService); const fileConfigurationService = accessor.get(IFilesConfigurationService); - const logFileOutputChannelDescriptor = this.getLogFileOutputChannelDescriptor(outputService); - if (logFileOutputChannelDescriptor) { - await fileConfigurationService.updateReadonly(logFileOutputChannelDescriptor.file, true); + const fileOutputChannelDescriptor = this.getFileOutputChannelDescriptor(outputService); + if (fileOutputChannelDescriptor) { + await fileConfigurationService.updateReadonly(fileOutputChannelDescriptor.file, true); await editorService.openEditor({ - resource: logFileOutputChannelDescriptor.file, + resource: fileOutputChannelDescriptor.file, options: { pinned: true, } }); } } - private getLogFileOutputChannelDescriptor(outputService: IOutputService): IFileOutputChannelDescriptor | null { + private getFileOutputChannelDescriptor(outputService: IOutputService): IFileOutputChannelDescriptor | null { const channel = outputService.getActiveChannel(); if (channel) { const descriptor = outputService.getChannelDescriptors().filter(c => c.id === channel.id)[0]; - if (descriptor && descriptor.file && descriptor.log) { + if (descriptor?.file) { return descriptor; } } diff --git a/src/vs/workbench/contrib/output/browser/outputServices.ts b/src/vs/workbench/contrib/output/browser/outputServices.ts index 42d6e2bbd4e..27f04dabcc0 100644 --- a/src/vs/workbench/contrib/output/browser/outputServices.ts +++ b/src/vs/workbench/contrib/output/browser/outputServices.ts @@ -9,7 +9,7 @@ import { IDisposable, dispose, Disposable } from 'vs/base/common/lifecycle'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { Registry } from 'vs/platform/registry/common/platform'; -import { IOutputChannel, IOutputService, OUTPUT_VIEW_ID, OUTPUT_SCHEME, LOG_MIME, OUTPUT_MIME, OutputChannelUpdateMode, IOutputChannelDescriptor, Extensions, IOutputChannelRegistry, ACTIVE_OUTPUT_CHANNEL_CONTEXT, CONTEXT_ACTIVE_LOG_OUTPUT } from 'vs/workbench/services/output/common/output'; +import { IOutputChannel, IOutputService, OUTPUT_VIEW_ID, OUTPUT_SCHEME, LOG_MIME, OUTPUT_MIME, OutputChannelUpdateMode, IOutputChannelDescriptor, Extensions, IOutputChannelRegistry, ACTIVE_OUTPUT_CHANNEL_CONTEXT, CONTEXT_ACTIVE_FILE_OUTPUT } from 'vs/workbench/services/output/common/output'; import { OutputLinkProvider } from 'vs/workbench/contrib/output/browser/outputLinkProvider'; import { ITextModelService, ITextModelContentProvider } from 'vs/editor/common/services/resolverService'; import { ITextModel } from 'vs/editor/common/model'; @@ -73,7 +73,7 @@ export class OutputService extends Disposable implements IOutputService, ITextMo readonly onActiveOutputChannel: Event = this._onActiveOutputChannel.event; private readonly activeOutputChannelContext: IContextKey; - private readonly activeLogOutputChannelContext: IContextKey; + private readonly activeFileOutputChannelContext: IContextKey; constructor( @IStorageService private readonly storageService: IStorageService, @@ -90,7 +90,7 @@ export class OutputService extends Disposable implements IOutputService, ITextMo this.activeOutputChannelContext.set(this.activeChannelIdInStorage); this._register(this.onActiveOutputChannel(channel => this.activeOutputChannelContext.set(channel))); - this.activeLogOutputChannelContext = CONTEXT_ACTIVE_LOG_OUTPUT.bindTo(contextKeyService); + this.activeFileOutputChannelContext = CONTEXT_ACTIVE_FILE_OUTPUT.bindTo(contextKeyService); // Register as text model content provider for output textModelResolverService.registerTextModelContentProvider(OUTPUT_SCHEME, this); @@ -196,7 +196,7 @@ export class OutputService extends Disposable implements IOutputService, ITextMo private setActiveChannel(channel: OutputChannel | undefined): void { this.activeChannel = channel; - this.activeLogOutputChannelContext.set(!!channel?.outputChannelDescriptor?.file && channel?.outputChannelDescriptor?.log); + this.activeFileOutputChannelContext.set(!!channel?.outputChannelDescriptor?.file); if (this.activeChannel) { this.storageService.store(OUTPUT_ACTIVE_CHANNEL_KEY, this.activeChannel.id, StorageScope.WORKSPACE, StorageTarget.MACHINE); diff --git a/src/vs/workbench/contrib/output/browser/outputView.ts b/src/vs/workbench/contrib/output/browser/outputView.ts index aad161b5818..3612031dc54 100644 --- a/src/vs/workbench/contrib/output/browser/outputView.ts +++ b/src/vs/workbench/contrib/output/browser/outputView.ts @@ -118,7 +118,6 @@ export class OutputViewPane extends ViewPane { this.editor.layout(new Dimension(width, height)); } - private onDidChangeVisibility(visible: boolean): void { this.editor.setVisible(visible); if (!visible) { diff --git a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts index e953502efac..db3605eb6bd 100644 --- a/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts +++ b/src/vs/workbench/contrib/performance/browser/perfviewEditor.ts @@ -27,6 +27,7 @@ import { isWeb } from 'vs/base/common/platform'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; import { ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; import * as perf from 'vs/base/common/performance'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; export class PerfviewContrib { @@ -59,7 +60,8 @@ export class PerfviewInput extends TextResourceEditorInput { @IEditorService editorService: IEditorService, @IFileService fileService: IFileService, @ILabelService labelService: ILabelService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { super( PerfviewInput.Uri, @@ -72,7 +74,8 @@ export class PerfviewInput extends TextResourceEditorInput { editorService, fileService, labelService, - filesConfigurationService + filesConfigurationService, + textResourceConfigurationService ); } } diff --git a/src/vs/workbench/contrib/remote/browser/media/remoteViewlet.css b/src/vs/workbench/contrib/remote/browser/media/remoteViewlet.css index ef32cf43f39..4ebb0d89702 100644 --- a/src/vs/workbench/contrib/remote/browser/media/remoteViewlet.css +++ b/src/vs/workbench/contrib/remote/browser/media/remoteViewlet.css @@ -13,7 +13,7 @@ flex-wrap: nowrap; } -.remote-help-content .monaco-list .monaco-list-row .remote-help-tree-node-item>.remote-help-tree-node-item-icon { +.remote-help-content .monaco-list .monaco-list-row .remote-help-tree-node-item > .remote-help-tree-node-item-icon { background-size: 16px; background-position: left center; background-repeat: no-repeat; diff --git a/src/vs/workbench/contrib/scm/browser/media/scm.css b/src/vs/workbench/contrib/scm/browser/media/scm.css index d398ddf117a..789055c36b9 100644 --- a/src/vs/workbench/contrib/scm/browser/media/scm.css +++ b/src/vs/workbench/contrib/scm/browser/media/scm.css @@ -303,9 +303,7 @@ padding: 1px 3px 1px 1px; } -.scm-view .scm-input .scm-editor .scm-editor-toolbar.hidden, -.scm-view .scm-input .scm-editor .scm-editor-toolbar .monaco-action-bar.hidden, -.scm-view .scm-input .scm-editor .scm-editor-toolbar .monaco-toolbar.hidden { +.scm-view .scm-input .scm-editor .scm-editor-toolbar.hidden { display: none; } diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts index bad5fc40df6..7bb2b9bc442 100644 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts @@ -1769,20 +1769,19 @@ class HistoryItemViewChangesAction extends Action2 { registerAction2(HistoryItemViewChangesAction); -const enum SCMInputCommandId { +const enum SCMInputWidgetCommandId { CancelAction = 'scm.input.cancelAction' } -const SCMInputContextKeys = { - ActionCount: new RawContextKey('scmInputActionCount', 0), - ActionIsEnabled: new RawContextKey('scmInputActionIsEnabled', false), - ActionIsRunning: new RawContextKey('scmInputActionIsRunning', false), -}; +const enum SCMInputWidgetStorageKey { + LastActionId = 'scm.input.lastActionId' +} class SCMInputWidgetActionRunner extends ActionRunner { - private _runningActions = new Set(); - private _ctxIsActionRunning: IContextKey; + private readonly _runningActions = new Set(); + public get runningActions(): Set { return this._runningActions; } + private _cts: CancellationTokenSource | undefined; constructor( @@ -1791,24 +1790,20 @@ class SCMInputWidgetActionRunner extends ActionRunner { @IStorageService private readonly storageService: IStorageService ) { super(); - - this._ctxIsActionRunning = SCMInputContextKeys.ActionIsRunning.bindTo(contextKeyService); } protected override async runAction(action: IAction): Promise { try { // Cancel previous action - if (this._ctxIsActionRunning.get() === true) { + if (this.runningActions.size !== 0) { this._cts?.cancel(); - if (action.id === SCMInputCommandId.CancelAction) { + if (action.id === SCMInputWidgetCommandId.CancelAction) { return; } } - this._runningActions.add(action); - this._ctxIsActionRunning.set(true); - + // Create action context const context: ISCMInputValueProviderContext[] = []; for (const group of this.input.repository.provider.groups) { context.push({ @@ -1817,15 +1812,16 @@ class SCMInputWidgetActionRunner extends ActionRunner { }); } + // Run action + this._runningActions.add(action); this._cts = new CancellationTokenSource(); await action.run(...[this.input.repository.provider.rootUri, context, this._cts.token]); } finally { this._runningActions.delete(action); + // Save last action if (this._runningActions.size === 0) { - this.storageService.store('scm.input.lastActionId', action.id, StorageScope.PROFILE, StorageTarget.USER); - - this._ctxIsActionRunning.set(false); + this.storageService.store(SCMInputWidgetStorageKey.LastActionId, action.id, StorageScope.PROFILE, StorageTarget.USER); } } } @@ -1837,11 +1833,16 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { private _dropdownActions: IAction[] = []; get dropdownActions(): IAction[] { return this._dropdownActions; } - private readonly _ctxActionCount: IContextKey; + private _dropdownAction: IAction; + get dropdownAction(): IAction { return this._dropdownAction; } + + private _onDidChange = new Emitter(); + readonly onDidChange: Event = this._onDidChange.event; constructor( container: HTMLElement, - menuId: MenuId, + input: ISCMInput, + actionRunner: SCMInputWidgetActionRunner, options: IMenuWorkbenchToolBarOptions | undefined, @IMenuService menuService: IMenuService, @IContextKeyService contextKeyService: IContextKeyService, @@ -1851,50 +1852,63 @@ class SCMInputWidgetToolbar extends WorkbenchToolBar { @IStorageService storageService: IStorageService, @ITelemetryService telemetryService: ITelemetryService, ) { - super(container, { resetMenu: menuId, ...options }, menuService, contextKeyService, contextMenuService, keybindingService, telemetryService); + super(container, { resetMenu: MenuId.SCMInputBox, ...options }, menuService, contextKeyService, contextMenuService, keybindingService, telemetryService); - const menu = this._store.add(menuService.createMenu(menuId, contextKeyService, { emitEventsForSubmenuChanges: true })); + const menu = this._store.add(menuService.createMenu(MenuId.SCMInputBox, contextKeyService, { emitEventsForSubmenuChanges: true })); + + this._dropdownAction = new Action( + 'scmInputMoreActions', + localize('scmInputMoreActions', "More Actions..."), + 'codicon-chevron-down'); const cancelAction = new MenuItemAction({ - id: SCMInputCommandId.CancelAction, + id: SCMInputWidgetCommandId.CancelAction, title: localize('scmInputCancelAction', "Cancel"), icon: Codicon.debugStop, }, undefined, undefined, undefined, contextKeyService, commandService); - this._ctxActionCount = SCMInputContextKeys.ActionCount.bindTo(contextKeyService); + const isEnabled = (): boolean => { + return input.repository.provider.groups.some(g => g.resources.length > 0); + }; const updateToolbar = () => { const actions: IAction[] = []; createAndFillInActionBarActions(menu, options?.menuOptions, actions); + for (const action of actions) { + action.enabled = isEnabled(); + } + this._dropdownAction.enabled = isEnabled(); + let primaryAction: IAction | undefined = undefined; - if (contextKeyService.getContextKeyValue(SCMInputContextKeys.ActionIsRunning.key) === true) { - primaryAction = cancelAction; - } else if (actions.length === 1) { + if (actions.length === 1) { primaryAction = actions[0]; } else if (actions.length > 1) { - const lastActionId = storageService.get('scm.input.lastActionId', StorageScope.PROFILE, ''); + const lastActionId = storageService.get(SCMInputWidgetStorageKey.LastActionId, StorageScope.PROFILE, ''); primaryAction = actions.find(a => a.id === lastActionId) ?? actions[0]; } - if (primaryAction && - primaryAction.id !== SCMInputCommandId.CancelAction && - contextKeyService.getContextKeyValue(SCMInputContextKeys.ActionIsEnabled.key) === false) { - primaryAction.enabled = false; - } - - this._ctxActionCount.set(actions.length); this._dropdownActions = actions.length === 1 ? [] : actions; - - container.classList.toggle('has-no-actions', actions.length === 0); super.setActions(primaryAction ? [primaryAction] : [], []); + + this._onDidChange.fire(); }; this._store.add(menu.onDidChange(() => updateToolbar())); + this._store.add(input.repository.provider.onDidChangeResources(() => updateToolbar())); - const ctxKeys = new Set([SCMInputContextKeys.ActionIsEnabled.key, SCMInputContextKeys.ActionIsRunning.key]); - this._store.add(Event.filter(contextKeyService.onDidChangeContext, e => e.affectsSome(ctxKeys))(() => updateToolbar())); + this._store.add(actionRunner.onWillRun(e => { + if (actionRunner.runningActions.size === 0) { + super.setActions([cancelAction], []); + this._onDidChange.fire(); + } + })); + this._store.add(actionRunner.onDidRun(e => { + if (actionRunner.runningActions.size === 0) { + updateToolbar(); + } + })); // Delay initial update to finish class initialization setTimeout(() => updateToolbar(), 0); @@ -1917,8 +1931,7 @@ class SCMInputWidget { private placeholderTextContainer: HTMLElement; private inputEditor: CodeEditorWidget; private toolbarContainer: HTMLElement; - private toolbarContextKeyService: IContextKeyService; - private actionBar: ActionBar; + private toolbar: SCMInputWidgetToolbar | undefined; private readonly disposables = new DisposableStore(); private model: { readonly input: ISCMInput; textModelRef?: IReference } | undefined; @@ -2072,34 +2085,9 @@ class SCMInputWidget { updateEnablement(input.enabled); // Toolbar - const onDidChangeActionButton = () => { - this.actionBar.clear(); - - const actionCount = this.toolbarContextKeyService.getContextKeyValue(SCMInputContextKeys.ActionCount.key) ?? 0; - - if (input.actionButton && actionCount === 0) { - const action = new Action( - input.actionButton.command.id, - input.actionButton.command.title, - ThemeIcon.isThemeIcon(input.actionButton.icon) ? ThemeIcon.asClassName(input.actionButton.icon) : undefined, - input.actionButton.enabled, - () => this.commandService.executeCommand(input.actionButton!.command.id, ...(input.actionButton!.command.arguments || []))); - - this.actionBar.push(action, { icon: true, label: false }); - } - - this.layout(); - }; - - const ctxKeys = new Set([SCMInputContextKeys.ActionCount.key]); - this.repositoryDisposables.add(Event.filter(this.toolbarContextKeyService.onDidChangeContext, e => e.affectsSome(ctxKeys))(onDidChangeActionButton, this)); - - this.repositoryDisposables.add(input.onDidChangeActionButton(onDidChangeActionButton, this)); - this.repositoryDisposables.add(Event.filter(this.configurationService.onDidChangeConfiguration, e => e.affectsConfiguration('scm.showInputActionButton'))(onDidChangeActionButton, this)); - onDidChangeActionButton(); - - // Toolbar (new) - this.createToolbar(input); + this.toolbar = this.createToolbar(input); + this.repositoryDisposables.add(this.toolbar.onDidChange(() => this.layout())); + this.repositoryDisposables.add(this.toolbar); } get selections(): Selection[] | null { @@ -2112,34 +2100,25 @@ class SCMInputWidget { } } - private createToolbar(input: ISCMInput): void { - const services = new ServiceCollection([IContextKeyService, this.toolbarContextKeyService]); - const instantiationService2 = this.instantiationService.createChild(services); - - const ctxIsActionEnabled = SCMInputContextKeys.ActionIsEnabled.bindTo(this.toolbarContextKeyService); - this.repositoryDisposables.add(input.repository.provider.onDidChangeResources(() => ctxIsActionEnabled.set(input.repository.provider.groups.some(r => r.resources.length > 0)))); - ctxIsActionEnabled.set(input.repository.provider.groups.some(r => r.resources.length > 0)); - - const actionRunner = instantiationService2.createInstance(SCMInputWidgetActionRunner, input); + private createToolbar(input: ISCMInput): SCMInputWidgetToolbar { + const actionRunner = this.instantiationService.createInstance(SCMInputWidgetActionRunner, input); this.repositoryDisposables.add(actionRunner); - const toolbar: SCMInputWidgetToolbar = instantiationService2.createInstance(SCMInputWidgetToolbar, this.toolbarContainer, MenuId.SCMInputBox, { + const toolbar: SCMInputWidgetToolbar = this.instantiationService.createInstance(SCMInputWidgetToolbar, this.toolbarContainer, input, actionRunner, { actionRunner, actionViewItemProvider: action => { if (action instanceof MenuItemAction && toolbar.dropdownActions.length > 1) { - const scmInputActionIsEnabled = this.toolbarContextKeyService.getContextKeyValue('scmInputActionIsEnabled') === true; - const dropdownAction = new Action('scmInputMoreActions', localize('scmInputMoreActions', 'More Actions...'), 'codicon-chevron-down', scmInputActionIsEnabled); - - return instantiationService2.createInstance(DropdownWithPrimaryActionViewItem, action, dropdownAction, toolbar.dropdownActions, '', this.contextMenuService, { actionRunner }); + return this.instantiationService.createInstance(DropdownWithPrimaryActionViewItem, action, toolbar.dropdownAction, toolbar.dropdownActions, '', this.contextMenuService, { actionRunner }); } - return createActionViewItem(instantiationService2, action); + return createActionViewItem(this.instantiationService, action); }, menuOptions: { shouldForwardArgs: true } }); - this.repositoryDisposables.add(toolbar); + + return toolbar; } private setValidation(validation: IInputValidation | undefined, options?: { focus?: boolean; timeout?: boolean }) { @@ -2163,7 +2142,7 @@ class SCMInputWidget { constructor( container: HTMLElement, overflowWidgetsDomNode: HTMLElement, - @IContextKeyService private readonly contextKeyService: IContextKeyService, + @IContextKeyService contextKeyService: IContextKeyService, @IModelService private modelService: IModelService, @ITextModelService private textModelService: ITextModelService, @IKeybindingService private keybindingService: IKeybindingService, @@ -2172,8 +2151,7 @@ class SCMInputWidget { @ISCMViewService private readonly scmViewService: ISCMViewService, @IContextViewService private readonly contextViewService: IContextViewService, @IOpenerService private readonly openerService: IOpenerService, - @IContextMenuService private readonly contextMenuService: IContextMenuService, - @ICommandService private readonly commandService: ICommandService + @IContextMenuService private readonly contextMenuService: IContextMenuService ) { this.element = append(container, $('.scm-editor')); this.editorContainer = append(this.element, $('.scm-editor-container')); @@ -2186,8 +2164,6 @@ class SCMInputWidget { this.setPlaceholderFontStyles(fontFamily, fontSize, lineHeight); - this.toolbarContextKeyService = this.contextKeyService.createScoped(this.toolbarContainer); - const contextKeyService2 = contextKeyService.createScoped(this.element); this.repositoryIdContextKey = contextKeyService2.createKey('scmRepository', undefined); @@ -2309,11 +2285,9 @@ class SCMInputWidget { this.setPlaceholderFontStyles(fontFamily, fontSize, lineHeight); })); - this.onDidChangeContentHeight = Event.signal(Event.filter(this.inputEditor.onDidContentSizeChange, e => e.contentHeightChanged, this.disposables)); + Event.filter(this.configurationService.onDidChangeConfiguration, e => e.affectsConfiguration('scm.showInputActionButton'))(() => this.layout(), this, this.disposables); - // Toolbar - this.actionBar = new ActionBar(this.toolbarContainer); - this.disposables.add(this.actionBar); + this.onDidChangeContentHeight = Event.signal(Event.filter(this.inputEditor.onDidContentSizeChange, e => e.contentHeightChanged, this.disposables)); } getContentHeight(): number { @@ -2338,8 +2312,8 @@ class SCMInputWidget { this.placeholderTextContainer.style.width = `${dimension.width}px`; this.renderValidation(); - this.actionBar.domNode.classList.toggle('hidden', this.actionBar.isEmpty()); - this.toolbarContainer.classList.toggle('hidden', this.configurationService.getValue('scm.showInputActionButton') === false); + const showInputActionButton = this.configurationService.getValue('scm.showInputActionButton') === true; + this.toolbarContainer.classList.toggle('hidden', !showInputActionButton || this.toolbar?.isEmpty() === true); if (this.shouldFocusAfterLayout) { this.shouldFocusAfterLayout = false; @@ -2473,13 +2447,13 @@ class SCMInputWidget { private getToolbarWidth(): number { const showInputActionButton = this.configurationService.getValue('scm.showInputActionButton'); - const actionCount = this.toolbarContextKeyService.getContextKeyValue(SCMInputContextKeys.ActionCount.key) ?? 0; - - if (!showInputActionButton || (this.actionBar.isEmpty() && actionCount === 0)) { + if (!this.toolbar || !showInputActionButton || this.toolbar?.isEmpty() === true) { return 0; } - return 26; /* 22px action + 4px margin */ + return this.toolbar.dropdownActions.length === 0 ? + 26 /* 22px action + 4px margin */ : + 39 /* 35px action + 4px margin */; } private computeLineHeight(fontSize: number): number { @@ -2938,7 +2912,6 @@ export class SCMViewPane extends ViewPane { const repositoryDisposables = new DisposableStore(); repositoryDisposables.add(repository.provider.onDidChange(() => this.updateChildren(repository))); - repositoryDisposables.add(repository.input.onDidChangeActionButton(() => this.updateChildren(repository))); repositoryDisposables.add(repository.input.onDidChangeVisibility(() => this.updateChildren(repository))); repositoryDisposables.add(repository.provider.onDidChangeResourceGroups(() => this.updateChildren(repository))); diff --git a/src/vs/workbench/contrib/scm/common/scm.ts b/src/vs/workbench/contrib/scm/common/scm.ts index 7040ee2df1f..46ea1f2303c 100644 --- a/src/vs/workbench/contrib/scm/common/scm.ts +++ b/src/vs/workbench/contrib/scm/common/scm.ts @@ -111,12 +111,6 @@ export interface ISCMInputChangeEvent { readonly reason?: SCMInputChangeReason; } -export interface ISCMInputActionButtonDescriptor { - command: Command; - icon?: URI | { light: URI; dark: URI } | ThemeIcon; - enabled: boolean; -} - export interface ISCMActionButtonDescriptor { command: Command; secondaryCommands?: Command[][]; @@ -149,9 +143,6 @@ export interface ISCMInput { visible: boolean; readonly onDidChangeVisibility: Event; - actionButton: ISCMInputActionButtonDescriptor | undefined; - readonly onDidChangeActionButton: Event; - setFocus(): void; readonly onDidChangeFocus: Event; diff --git a/src/vs/workbench/contrib/search/browser/searchModel.ts b/src/vs/workbench/contrib/search/browser/searchModel.ts index 82b4121cf6a..69f0df2bacd 100644 --- a/src/vs/workbench/contrib/search/browser/searchModel.ts +++ b/src/vs/workbench/contrib/search/browser/searchModel.ts @@ -1608,6 +1608,7 @@ export class SearchResult extends Disposable { super(); this._rangeHighlightDecorations = this.instantiationService.createInstance(RangeHighlightDecorations); + this.modelService.getModels().forEach(model => this.onModelAdded(model)); this._register(this.modelService.onModelAdded(model => this.onModelAdded(model))); this._register(this.notebookEditorService.onDidAddNotebookEditor(widget => { diff --git a/src/vs/workbench/contrib/tags/electron-sandbox/workspaceTagsService.ts b/src/vs/workbench/contrib/tags/electron-sandbox/workspaceTagsService.ts index 7fb30ccbbb6..cc7ab8af2ae 100644 --- a/src/vs/workbench/contrib/tags/electron-sandbox/workspaceTagsService.ts +++ b/src/vs/workbench/contrib/tags/electron-sandbox/workspaceTagsService.ts @@ -59,11 +59,16 @@ const ModulesToLookFor = [ 'aws-amplify', 'azure', 'azure-storage', + 'chroma', + 'faiss', 'firebase', '@google-cloud/common', 'heroku-cli', 'langchain', + 'milvus', 'openai', + 'pinecone', + 'qdrant', // Office and Sharepoint packages '@microsoft/teams-js', '@microsoft/office-js', @@ -463,8 +468,13 @@ export class WorkspaceTagsService implements IWorkspaceTagsService { "workspace.npm.playwright-firefox" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.playwright-webkit" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.cypress" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, + "workspace.npm.chroma" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, + "workspace.npm.faiss" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.langchain" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, + "workspace.npm.milvus" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.openai" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, + "workspace.npm.pinecone" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, + "workspace.npm.qdrant" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.nightwatch" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.protractor" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, "workspace.npm.puppeteer" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true }, diff --git a/src/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh b/src/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh index 50ea1e39a52..b64082777be 100755 --- a/src/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh +++ b/src/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh @@ -256,8 +256,8 @@ else __vsc_preexec_all() { if [ "$__vsc_in_command_execution" = "0" ]; then __vsc_in_command_execution="1" - builtin eval "${__vsc_dbg_trap}" __vsc_preexec + builtin eval "${__vsc_dbg_trap}" fi } trap '__vsc_preexec_all "$_"' DEBUG diff --git a/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.ts b/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.ts index 15e5cef62aa..34fa7dea75f 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalColorRegistry.ts @@ -77,7 +77,7 @@ export const TERMINAL_FIND_MATCH_BACKGROUND_COLOR = registerColor('terminal.find // Use regular selection background in high contrast with a thick border hcDark: null, hcLight: '#0F4A85' -}, nls.localize('terminal.findMatchBackground', 'Color of the current search match in the terminal. The color must not be opaque so as not to hide underlying terminal content.')); +}, nls.localize('terminal.findMatchBackground', 'Color of the current search match in the terminal. The color must not be opaque so as not to hide underlying terminal content.'), true); export const TERMINAL_HOVER_HIGHLIGHT_BACKGROUND_COLOR = registerColor('terminal.hoverHighlightBackground', { dark: transparent(editorHoverHighlight, 0.5), light: transparent(editorHoverHighlight, 0.5), @@ -95,7 +95,7 @@ export const TERMINAL_FIND_MATCH_HIGHLIGHT_BACKGROUND_COLOR = registerColor('ter light: editorFindMatchHighlight, hcDark: null, hcLight: null -}, nls.localize('terminal.findMatchHighlightBackground', 'Color of the other search matches in the terminal. The color must not be opaque so as not to hide underlying terminal content.')); +}, nls.localize('terminal.findMatchHighlightBackground', 'Color of the other search matches in the terminal. The color must not be opaque so as not to hide underlying terminal content.'), true); export const TERMINAL_FIND_MATCH_HIGHLIGHT_BORDER_COLOR = registerColor('terminal.findMatchHighlightBorder', { dark: null, light: null, @@ -113,7 +113,7 @@ export const TERMINAL_DRAG_AND_DROP_BACKGROUND = registerColor('terminal.dropBac light: EDITOR_DRAG_AND_DROP_BACKGROUND, hcDark: EDITOR_DRAG_AND_DROP_BACKGROUND, hcLight: EDITOR_DRAG_AND_DROP_BACKGROUND -}, nls.localize('terminal.dragAndDropBackground', "Background color when dragging on top of terminals. The color should have transparency so that the terminal contents can still shine through.")); +}, nls.localize('terminal.dragAndDropBackground', "Background color when dragging on top of terminals. The color should have transparency so that the terminal contents can still shine through."), true); export const TERMINAL_TAB_ACTIVE_BORDER = registerColor('terminal.tab.activeBorder', { dark: TAB_ACTIVE_BORDER, light: TAB_ACTIVE_BORDER, diff --git a/src/vs/workbench/contrib/terminalContrib/developer/browser/media/developer.css b/src/vs/workbench/contrib/terminalContrib/developer/browser/media/developer.css index 3873d8423f4..ad552b0a47b 100644 --- a/src/vs/workbench/contrib/terminalContrib/developer/browser/media/developer.css +++ b/src/vs/workbench/contrib/terminalContrib/developer/browser/media/developer.css @@ -27,6 +27,10 @@ .monaco-workbench .xterm.dev-mode .xterm-sequence-decoration { background-color: var(--vscode-terminal-background, var(--vscode-panel-background)); + display: none !important; +} +.monaco-workbench .xterm.dev-mode:hover .xterm-sequence-decoration { + display: block !important; } .monaco-workbench .xterm.dev-mode .xterm-sequence-decoration.left { direction: rtl; diff --git a/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts b/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts index e226b405a7a..c13e9958e19 100644 --- a/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts +++ b/src/vs/workbench/contrib/testing/browser/testingOutputPeek.ts @@ -242,15 +242,14 @@ export class TestingPeekOpener extends Disposable implements ITestingPeekOpener return false; } - const message = candidate.message; this.showPeekFromUri({ type: TestUriType.ResultMessage, - documentUri: message.location!.uri, + documentUri: candidate.location.uri, taskIndex: candidate.taskId, messageIndex: candidate.index, resultId: result.id, testExtId: test.item.extId, - }, undefined, { selection: message.location!.range, ...options }); + }, undefined, { selection: candidate.location.range, ...options }); return true; } @@ -471,9 +470,14 @@ export class TestingPeekOpener extends Disposable implements ITestingPeekOpener * Gets the first failed message that can be displayed from the result. */ private getFailedCandidateMessage(test: TestResultItem) { - let best: { taskId: number; index: number; message: ITestMessage } | undefined; + const fallbackLocation = test.item.uri && test.item.range + ? { uri: test.item.uri, range: test.item.range } + : undefined; + + let best: { taskId: number; index: number; message: ITestMessage; location: IRichLocation } | undefined; mapFindTestMessage(test, (task, message, messageIndex, taskId) => { - if (!isFailedState(task.state) || !message.location) { + const location = message.location || fallbackLocation; + if (!isFailedState(task.state) || !location) { return; } @@ -481,7 +485,7 @@ export class TestingPeekOpener extends Disposable implements ITestingPeekOpener return; } - best = { taskId, index: messageIndex, message }; + best = { taskId, index: messageIndex, message, location }; }); return best; @@ -1092,6 +1096,10 @@ export class TestResultsView extends ViewPane { this.content.reveal({ preserveFocus, subject: new TaskSubject(result, 0) }); } + public showMessage(result: ITestResult, test: TestResultItem, taskIndex: number, messageIndex: number) { + this.content.reveal({ preserveFocus: false, subject: new MessageSubject(result, test, taskIndex, messageIndex) }); + } + protected override renderBody(container: HTMLElement): void { super.renderBody(container); this.content.fillBody(container); diff --git a/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts b/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts index c1de21e7820..97f2de57063 100644 --- a/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts +++ b/src/vs/workbench/contrib/testing/common/mainThreadTestCollection.ts @@ -5,10 +5,10 @@ import { Emitter } from 'vs/base/common/event'; import { Iterable } from 'vs/base/common/iterator'; -import { AbstractIncrementalTestCollection, IncrementalChangeCollector, IncrementalTestCollectionItem, InternalTestItem, TestDiffOpType, TestsDiff } from 'vs/workbench/contrib/testing/common/testTypes'; -import { IMainThreadTestCollection } from 'vs/workbench/contrib/testing/common/testService'; import { ResourceMap } from 'vs/base/common/map'; import { URI } from 'vs/base/common/uri'; +import { IMainThreadTestCollection } from 'vs/workbench/contrib/testing/common/testService'; +import { AbstractIncrementalTestCollection, ITestUriCanonicalizer, IncrementalChangeCollector, IncrementalTestCollectionItem, InternalTestItem, TestDiffOpType, TestsDiff } from 'vs/workbench/contrib/testing/common/testTypes'; export class MainThreadTestCollection extends AbstractIncrementalTestCollection implements IMainThreadTestCollection { private testsByUrl = new ResourceMap>(); @@ -47,8 +47,8 @@ export class MainThreadTestCollection extends AbstractIncrementalTestCollection< public readonly onBusyProvidersChange = this.busyProvidersChangeEmitter.event; - constructor(private readonly expandActual: (id: string, levels: number) => Promise) { - super(); + constructor(uriIdentityService: ITestUriCanonicalizer, private readonly expandActual: (id: string, levels: number) => Promise) { + super(uriIdentityService); } /** diff --git a/src/vs/workbench/contrib/testing/common/testResult.ts b/src/vs/workbench/contrib/testing/common/testResult.ts index 118fdc87da3..e6056621bf2 100644 --- a/src/vs/workbench/contrib/testing/common/testResult.ts +++ b/src/vs/workbench/contrib/testing/common/testResult.ts @@ -14,6 +14,7 @@ import { language } from 'vs/base/common/platform'; import { WellDefinedPrefixTree } from 'vs/base/common/prefixTree'; import { removeAnsiEscapeCodes } from 'vs/base/common/strings'; import { localize } from 'vs/nls'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { IComputedStateAccessor, refreshComputedState } from 'vs/workbench/contrib/testing/common/getComputedState'; import { TestCoverage } from 'vs/workbench/contrib/testing/common/testCoverage'; import { TestId } from 'vs/workbench/contrib/testing/common/testId'; @@ -646,6 +647,7 @@ export class HydratedTestResult implements ITestResult { private readonly testById = new Map(); constructor( + identity: IUriIdentityService, private readonly serialized: ISerializedTestResults, private readonly persist = true, ) { @@ -663,7 +665,7 @@ export class HydratedTestResult implements ITestResult { this.request = serialized.request; for (const item of serialized.items) { - const de = TestResultItem.deserialize(item); + const de = TestResultItem.deserialize(identity, item); this.counts[de.ownComputedState]++; this.testById.set(item.item.extId, de); } diff --git a/src/vs/workbench/contrib/testing/common/testResultStorage.ts b/src/vs/workbench/contrib/testing/common/testResultStorage.ts index 5574e744b8a..6140744e5eb 100644 --- a/src/vs/workbench/contrib/testing/common/testResultStorage.ts +++ b/src/vs/workbench/contrib/testing/common/testResultStorage.ts @@ -12,6 +12,7 @@ import { IFileService } from 'vs/platform/files/common/files'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { ILogService } from 'vs/platform/log/common/log'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { StoredValue } from 'vs/workbench/contrib/testing/common/storedValue'; import { HydratedTestResult, ITestResult } from 'vs/workbench/contrib/testing/common/testResult'; @@ -55,6 +56,7 @@ export abstract class BaseTestResultStorage extends Disposable implements ITestR }, this.storageService)); constructor( + @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, @IStorageService private readonly storageService: IStorageService, @ILogService private readonly logService: ILogService, ) { @@ -76,7 +78,7 @@ export abstract class BaseTestResultStorage extends Disposable implements ITestR return undefined; } - return new HydratedTestResult(contents); + return new HydratedTestResult(this.uriIdentityService, contents); } catch (e) { this.logService.warn(`Error deserializing stored test result ${id}`, e); return undefined; @@ -206,13 +208,14 @@ export class TestResultStorage extends BaseTestResultStorage { private readonly directory: URI; constructor( + @IUriIdentityService uriIdentityService: IUriIdentityService, @IStorageService storageService: IStorageService, @ILogService logService: ILogService, @IWorkspaceContextService workspaceContext: IWorkspaceContextService, @IFileService private readonly fileService: IFileService, @IEnvironmentService environmentService: IEnvironmentService, ) { - super(storageService, logService); + super(uriIdentityService, storageService, logService); this.directory = URI.joinPath(environmentService.workspaceStorageHome, workspaceContext.getWorkspace().id, 'testResults'); } diff --git a/src/vs/workbench/contrib/testing/common/testServiceImpl.ts b/src/vs/workbench/contrib/testing/common/testServiceImpl.ts index e7541f0d2f2..3af68d68c4e 100644 --- a/src/vs/workbench/contrib/testing/common/testServiceImpl.ts +++ b/src/vs/workbench/contrib/testing/common/testServiceImpl.ts @@ -29,6 +29,7 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { getTestingConfiguration, TestingConfigKeys } from 'vs/workbench/contrib/testing/common/configuration'; import { isDefined } from 'vs/base/common/types'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; export class TestService extends Disposable implements ITestService { declare readonly _serviceBrand: undefined; @@ -67,7 +68,7 @@ export class TestService extends Disposable implements ITestService { /** * @inheritdoc */ - public readonly collection = new MainThreadTestCollection(this.expandTest.bind(this)); + public readonly collection = new MainThreadTestCollection(this.uriIdentityService, this.expandTest.bind(this)); /** * @inheritdoc @@ -86,6 +87,7 @@ export class TestService extends Disposable implements ITestService { constructor( @IContextKeyService contextKeyService: IContextKeyService, @IInstantiationService instantiationService: IInstantiationService, + @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, @IStorageService private readonly storage: IStorageService, @IEditorService private readonly editorService: IEditorService, @ITestProfileService private readonly testProfiles: ITestProfileService, diff --git a/src/vs/workbench/contrib/testing/common/testTypes.ts b/src/vs/workbench/contrib/testing/common/testTypes.ts index 0b3486efa89..883b00fa5f9 100644 --- a/src/vs/workbench/contrib/testing/common/testTypes.ts +++ b/src/vs/workbench/contrib/testing/common/testTypes.ts @@ -10,6 +10,7 @@ import { IPosition, Position } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; import { TestId } from 'vs/workbench/contrib/testing/common/testId'; + export const enum TestResultState { Unset = 0, Queued = 1, @@ -129,6 +130,12 @@ export interface IRichLocation { uri: URI; } +/** Subset of the IUriIdentityService */ +export interface ITestUriCanonicalizer { + /** @link import('vs/platform/uriIdentity/common/uriIdentity').IUriIdentityService */ + asCanonicalUri(uri: URI): URI; +} + export namespace IRichLocation { export interface Serialize { range: IRange; @@ -140,9 +147,9 @@ export namespace IRichLocation { uri: location.uri.toJSON(), }); - export const deserialize = (location: Serialize): IRichLocation => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, location: Serialize): IRichLocation => ({ range: Range.lift(location.range), - uri: URI.revive(location.uri), + uri: uriIdentity.asCanonicalUri(URI.revive(location.uri)), }); } @@ -179,13 +186,13 @@ export namespace ITestErrorMessage { location: message.location && IRichLocation.serialize(message.location), }); - export const deserialize = (message: Serialized): ITestErrorMessage => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, message: Serialized): ITestErrorMessage => ({ message: message.message, type: TestMessageType.Error, expected: message.expected, actual: message.actual, contextValue: message.contextValue, - location: message.location && IRichLocation.deserialize(message.location), + location: message.location && IRichLocation.deserialize(uriIdentity, message.location), }); } @@ -221,12 +228,12 @@ export namespace ITestOutputMessage { location: message.location && IRichLocation.serialize(message.location), }); - export const deserialize = (message: Serialized): ITestOutputMessage => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, message: Serialized): ITestOutputMessage => ({ message: message.message, type: TestMessageType.Output, offset: message.offset, length: message.length, - location: message.location && IRichLocation.deserialize(message.location), + location: message.location && IRichLocation.deserialize(uriIdentity, message.location), }); } @@ -238,8 +245,8 @@ export namespace ITestMessage { export const serialize = (message: Readonly): Serialized => message.type === TestMessageType.Error ? ITestErrorMessage.serialize(message) : ITestOutputMessage.serialize(message); - export const deserialize = (message: Serialized): ITestMessage => - message.type === TestMessageType.Error ? ITestErrorMessage.deserialize(message) : ITestOutputMessage.deserialize(message); + export const deserialize = (uriIdentity: ITestUriCanonicalizer, message: Serialized): ITestMessage => + message.type === TestMessageType.Error ? ITestErrorMessage.deserialize(uriIdentity, message) : ITestOutputMessage.deserialize(uriIdentity, message); } export interface ITestTaskState { @@ -267,10 +274,10 @@ export namespace ITestTaskState { messages: state.messages.map(ITestMessage.serialize), }); - export const deserialize = (state: Serialized): ITestTaskState => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, state: Serialized): ITestTaskState => ({ state: state.state, duration: state.duration, - messages: state.messages.map(ITestMessage.deserialize), + messages: state.messages.map(m => ITestMessage.deserialize(uriIdentity, m)), }); } @@ -342,13 +349,13 @@ export namespace ITestItem { sortText: item.sortText }); - export const deserialize = (serialized: Serialized): ITestItem => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, serialized: Serialized): ITestItem => ({ extId: serialized.extId, label: serialized.label, tags: serialized.tags, busy: serialized.busy, children: undefined, - uri: serialized.uri ? URI.revive(serialized.uri) : undefined, + uri: serialized.uri ? uriIdentity.asCanonicalUri(URI.revive(serialized.uri)) : undefined, range: serialized.range ? Range.lift(serialized.range) : null, description: serialized.description, error: serialized.error, @@ -386,13 +393,13 @@ export namespace InternalTestItem { item: ITestItem.serialize(item.item) }); - export const deserialize = (serialized: Serialized): InternalTestItem => ({ + export const deserialize = (uriIdentity: ITestUriCanonicalizer, serialized: Serialized): InternalTestItem => ({ // the `controllerId` is derived from the test.item.extId. It's redundant // in the non-serialized InternalTestItem too, but there just because it's // checked against in many hot paths. controllerId: TestId.root(serialized.item.extId), expand: serialized.expand, - item: ITestItem.deserialize(serialized.item) + item: ITestItem.deserialize(uriIdentity, serialized.item) }); } @@ -497,11 +504,11 @@ export namespace TestResultItem { tasks: original.tasks.map(ITestTaskState.serialize), }); - export const deserialize = (serialized: Serialized): TestResultItem => ({ - ...InternalTestItem.deserialize(serialized), + export const deserialize = (uriIdentity: ITestUriCanonicalizer, serialized: Serialized): TestResultItem => ({ + ...InternalTestItem.deserialize(uriIdentity, serialized), ownComputedState: serialized.ownComputedState, computedState: serialized.computedState, - tasks: serialized.tasks.map(ITestTaskState.deserialize), + tasks: serialized.tasks.map(m => ITestTaskState.deserialize(uriIdentity, m)), retired: true, }); } @@ -705,13 +712,13 @@ export namespace TestsDiffOp { | { op: TestDiffOpType.RemoveTag; id: string } | { op: TestDiffOpType.DocumentSynced; uri: UriComponents; docv?: number }; - export const deserialize = (u: Serialized): TestsDiffOp => { + export const deserialize = (uriIdentity: ITestUriCanonicalizer, u: Serialized): TestsDiffOp => { if (u.op === TestDiffOpType.Add) { - return { op: u.op, item: InternalTestItem.deserialize(u.item) }; + return { op: u.op, item: InternalTestItem.deserialize(uriIdentity, u.item) }; } else if (u.op === TestDiffOpType.Update) { return { op: u.op, item: ITestItemUpdate.deserialize(u.item) }; } else if (u.op === TestDiffOpType.DocumentSynced) { - return { op: u.op, uri: URI.revive(u.uri), docv: u.docv }; + return { op: u.op, uri: uriIdentity.asCanonicalUri(URI.revive(u.uri)), docv: u.docv }; } else { return u; } @@ -823,6 +830,8 @@ export abstract class AbstractIncrementalTestCollection = this._tags; + constructor(private readonly uriIdentity: ITestUriCanonicalizer) { } + /** * Applies the diff to the collection. */ @@ -832,7 +841,7 @@ export abstract class AbstractIncrementalTestCollection this.c.setDiff(d /* don't clear during testing */))); - const collection = new MainThreadTestCollection((testId, levels) => { + const collection = new MainThreadTestCollection({ asCanonicalUri: u => u }, (testId, levels) => { this.c.expand(testId, levels); if (!this.isProcessingDiff) { this.onDiff.fire(this.c.collectDiff()); diff --git a/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts b/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts index d6cb76e0848..1ccfb22aa67 100644 --- a/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts +++ b/src/vs/workbench/contrib/testing/test/common/testResultService.test.ts @@ -10,6 +10,7 @@ import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; import { MockContextKeyService } from 'vs/platform/keybinding/test/common/mockKeybindingService'; import { NullLogService } from 'vs/platform/log/common/log'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { TestId } from 'vs/workbench/contrib/testing/common/testId'; import { TestProfileService } from 'vs/workbench/contrib/testing/common/testProfileService'; import { HydratedTestResult, LiveTestResult, TaskRawOutput, TestResultItemChange, TestResultItemChangeReason, resultItemParents } from 'vs/workbench/contrib/testing/common/testResult'; @@ -207,7 +208,11 @@ suite('Workbench - Test Results Service', () => { } setup(() => { - storage = ds.add(new InMemoryResultStorage(ds.add(new TestStorageService()), new NullLogService())); + storage = ds.add(new InMemoryResultStorage({ + asCanonicalUri(uri) { + return uri; + }, + } as IUriIdentityService, ds.add(new TestStorageService()), new NullLogService())); results = ds.add(new TestTestResultService( new MockContextKeyService(), storage, @@ -277,6 +282,10 @@ suite('Workbench - Test Results Service', () => { }); const makeHydrated = async (completedAt = 42, state = TestResultState.Passed) => new HydratedTestResult({ + asCanonicalUri(uri) { + return uri; + }, + } as IUriIdentityService, { completedAt, id: 'some-id', tasks: [{ id: 't', name: undefined }], diff --git a/src/vs/workbench/contrib/testing/test/common/testResultStorage.test.ts b/src/vs/workbench/contrib/testing/test/common/testResultStorage.test.ts index 98d828c0a3d..a406eb7f2cc 100644 --- a/src/vs/workbench/contrib/testing/test/common/testResultStorage.test.ts +++ b/src/vs/workbench/contrib/testing/test/common/testResultStorage.test.ts @@ -8,6 +8,7 @@ import { range } from 'vs/base/common/arrays'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; import { NullLogService } from 'vs/platform/log/common/log'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { ITestResult, LiveTestResult } from 'vs/workbench/contrib/testing/common/testResult'; import { InMemoryResultStorage, RETAIN_MAX_RESULTS } from 'vs/workbench/contrib/testing/common/testResultStorage'; import { testStubs } from 'vs/workbench/contrib/testing/test/common/testStubs'; @@ -42,7 +43,11 @@ suite('Workbench - Test Result Storage', () => { setup(async () => { ds = new DisposableStore(); - storage = ds.add(new InMemoryResultStorage(ds.add(new TestStorageService()), new NullLogService())); + storage = ds.add(new InMemoryResultStorage({ + asCanonicalUri(uri) { + return uri; + }, + } as IUriIdentityService, ds.add(new TestStorageService()), new NullLogService())); }); teardown(() => ds.dispose()); diff --git a/src/vs/workbench/contrib/testing/test/common/testStubs.ts b/src/vs/workbench/contrib/testing/test/common/testStubs.ts index e2c41e8a2b7..836fe2143e8 100644 --- a/src/vs/workbench/contrib/testing/test/common/testStubs.ts +++ b/src/vs/workbench/contrib/testing/test/common/testStubs.ts @@ -106,7 +106,7 @@ export class TestTestCollection extends TestItemCollection { * roots/stubs. */ export const getInitializedMainTestCollection = async (singleUse = testStubs.nested()) => { - const c = new MainThreadTestCollection(async (t, l) => singleUse.expand(t, l)); + const c = new MainThreadTestCollection({ asCanonicalUri: u => u }, async (t, l) => singleUse.expand(t, l)); await singleUse.expand(singleUse.root.id, Infinity); c.apply(singleUse.collectDiff()); singleUse.dispose(); diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css b/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css index 0790a628607..2a31a8ba681 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css @@ -8,7 +8,7 @@ background-image: url('../../../../browser/media/code-icon.svg'); } -.monaco-workbench .part.editor>.content .gettingStartedContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer { box-sizing: border-box; line-height: 22px; position: relative; @@ -20,26 +20,26 @@ outline: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.loading { +.monaco-workbench .part.editor > .content .gettingStartedContainer.loading { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer img { +.monaco-workbench .part.editor > .content .gettingStartedContainer img { max-width: 100%; max-height: 100%; object-fit: contain; pointer-events: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer { font-size: 13px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStarted { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStarted { height: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer h1 { +.monaco-workbench .part.editor > .content .gettingStartedContainer h1 { padding: 5px 0 0; margin: 0; border: none; @@ -48,24 +48,24 @@ white-space: nowrap; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .title { +.monaco-workbench .part.editor > .content .gettingStartedContainer .title { margin-top: 1em; margin-bottom: 1em; flex: 1 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .subtitle { +.monaco-workbench .part.editor > .content .gettingStartedContainer .subtitle { margin-top: .6em; font-size: 2em; display: block; } -.monaco-workbench.hc-black .part.editor>.content .gettingStartedContainer .subtitle, -.monaco-workbench.hc-light .part.editor>.content .gettingStartedContainer .subtitle { +.monaco-workbench.hc-black .part.editor > .content .gettingStartedContainer .subtitle, +.monaco-workbench.hc-light .part.editor > .content .gettingStartedContainer .subtitle { font-weight: 200; } -.monaco-workbench .part.editor>.content .gettingStartedContainer h2 { +.monaco-workbench .part.editor > .content .gettingStartedContainer h2 { font-weight: 400; margin-top: 0; margin-bottom: 5px; @@ -73,12 +73,12 @@ line-height: initial; } -.monaco-workbench .part.editor>.content .gettingStartedContainer a:focus { +.monaco-workbench .part.editor > .content .gettingStartedContainer a:focus { outline: 1px solid -webkit-focus-ring-color; outline-offset: -1px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide { width: 100%; height: 100%; padding: 0; @@ -88,23 +88,23 @@ top: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories { padding: 12px 24px; } /* duplicated until the getting-started specific setting is removed */ -.monaco-workbench .part.editor>.content .gettingStartedContainer.animatable .gettingStartedSlide { +.monaco-workbench .part.editor > .content .gettingStartedContainer.animatable .gettingStartedSlide { /* keep consistant with SLIDE_TRANSITION_TIME_MS in gettingStarted.ts */ transition: left 0.25s, opacity 0.25s; } -.monaco-workbench.reduce-motion .part.editor>.content .gettingStartedContainer .gettingStartedSlide, -.monaco-workbench.reduce-motion .part.editor>.content .gettingStartedContainer.animatable .gettingStartedSlide { +.monaco-workbench.reduce-motion .part.editor > .content .gettingStartedContainer .gettingStartedSlide, +.monaco-workbench.reduce-motion .part.editor > .content .gettingStartedContainer.animatable .gettingStartedSlide { /* keep consistant with SLIDE_TRANSITION_TIME_MS in gettingStarted.ts */ transition: left 0.0s, opacity 0.0s; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer { display: grid; height: 100%; max-width: 1200px; @@ -117,73 +117,73 @@ ". footer footer footer ."; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-constrained .gettingStartedSlideCategories>.gettingStartedCategoriesContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-constrained .gettingStartedSlideCategories > .gettingStartedCategoriesContainer { grid-template-rows: auto min-content minmax(min-content, auto) min-content; grid-template-columns: 1fr; grid-template-areas: "header" "left-column" "right-column" "footer"; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained .gettingStartedSlideCategories>.gettingStartedCategoriesContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .gettingStartedSlideCategories > .gettingStartedCategoriesContainer { grid-template-rows: auto minmax(min-content, auto) min-content; grid-template-areas: "header" "left-column right-column" "footer footer"; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained.width-constrained .gettingStartedSlideCategories>.gettingStartedCategoriesContainer { +.monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained.width-constrained .gettingStartedSlideCategories > .gettingStartedCategoriesContainer { grid-template-rows: min-content minmax(min-content, auto) min-content; grid-template-columns: 1fr; grid-template-areas: "left-column" "right-column" "footer"; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-constrained .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.header, .monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.header { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-constrained .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .header, .monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .header { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories li.showWalkthroughsEntry { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories li.showWalkthroughsEntry { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.noWalkthroughs .gettingStartedSlideCategories li.showWalkthroughsEntry, .gettingStartedContainer.noExtensions { +.monaco-workbench .part.editor > .content .gettingStartedContainer.noWalkthroughs .gettingStartedSlideCategories li.showWalkthroughsEntry, .gettingStartedContainer.noExtensions { display: unset; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>* { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > * { overflow: hidden; text-overflow: ellipsis; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.categories-column>div { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .categories-column > div { margin-bottom: 32px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.categories-column-left { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .categories-column-left { grid-area: left-column; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.categories-column-right { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .categories-column-right { grid-area: right-column; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.header { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .header { grid-area: header; align-self: end; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.footer { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .footer { grid-area: footer; justify-self: center; text-align: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .categories-slide-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .categories-slide-container { width: 90%; max-width: 1200px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .gap { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .gap { flex: 150px 0 1000 } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .category-title { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .category-title { margin: 4px 0 4px; font-size: 14px; font-weight: 500; @@ -194,58 +194,58 @@ white-space: nowrap; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .category-progress { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .category-progress { position: absolute; bottom: 0; left: 0; width: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category.no-progress { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category.no-progress { padding: 3px 6px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .getting-started-category.no-progress .category-progress { +.monaco-workbench .part.editor > .content .gettingStartedContainer .getting-started-category.no-progress .category-progress { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories ul { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories ul { list-style: none; margin: 0; line-height: 24px; padding-left: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories li { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories li { list-style: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .path { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .path { padding-left: 1em; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .icon-widget, -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .icon-widget, -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .featured-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .icon-widget, +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .icon-widget, +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .featured-icon { font-size: 20px; padding-right: 8px; position: relative; top: 3px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .codicon:not(.icon-widget, .featured-icon, .hide-category-button) { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .codicon:not(.icon-widget, .featured-icon, .hide-category-button) { margin: 0 2px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .codicon:first-child { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .codicon:first-child { margin-left: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .start-container img { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .start-container img { padding-right: 8px; position: relative; top: 3px; @@ -253,20 +253,20 @@ max-height: 16px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .keybinding-label { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .keybinding-label { padding-left: 1em; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .progress-bar-outer { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .progress-bar-outer { height: 4px; margin-top: 4px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .progress-bar-inner { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .progress-bar-inner { height: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category { width: calc(100% - 16px); font-size: 13px; box-sizing: border-box; @@ -276,36 +276,36 @@ text-align: left; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category { position: relative; border-radius: 6px; overflow: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .main-content { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .main-content { display: flex; align-items: center; justify-content: flex-start; width: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-description-content, -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-description-content, +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content { text-align: left; margin-left: 28px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content > .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content > .codicon { padding-right: 1px; font-size: 16px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content:not(:empty){ +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .description-content:not(:empty){ margin-bottom: 8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-description-content:not(:empty){ +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-description-content:not(:empty){ margin-bottom: 8px; margin-left: 32px; overflow: hidden; @@ -314,7 +314,7 @@ -webkit-box-orient: vertical; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { justify-self: flex-end; align-self: flex-start; border-radius: 4px; @@ -324,13 +324,13 @@ white-space: nowrap; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-badge { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured-badge { position: relative; top: -4px; left: -8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured { border-top: 30px solid var(--vscode-activityBarBadge-background); width: 30px; box-sizing: border-box; @@ -339,23 +339,23 @@ position: absolute; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured .featured-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured .featured-icon { top: -30px; left: 4px; font-size: 14px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .codicon.hide-category-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .codicon.hide-category-button { margin-left: auto; top: 4px; right: 8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category.featured .icon-widget { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category.featured .icon-widget { visibility: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category img.category-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category img.category-icon { padding-right: 8px; max-width: 20px; max-height: 20px; @@ -363,7 +363,7 @@ top: auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category img.featured-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category img.featured-icon { padding-right: 8px; max-width: 24px; max-height: 24px; @@ -371,80 +371,80 @@ position: relative; top: auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-category img.category-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-category img.category-icon { margin-right: 10px; margin-left: 10px; max-width: 32px; max-height: 32px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails { display: flex; flex-direction: column; overflow: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gap { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gap { flex: 150px 0 1000 } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-category { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-category { display: flex; margin-bottom: 24px; min-height: auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns .gap { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns .gap { flex: 150px 1 1000 } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.getting-started-category>.codicon-getting-started-setup { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .getting-started-category > .codicon-getting-started-setup { margin-right: 8px; font-size: 28px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns { display: flex; justify-content: flex-start; padding: 40px 40px 0; max-height: calc(100% - 40px); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step { display: flex; width: 100%; overflow: hidden; border-radius: 6px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .button-container:not(:last-of-type) { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .button-container:not(:last-of-type) { margin-bottom: 6px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded { cursor: default !important; border: 1px solid var(--vscode-welcomePage-tileBorder); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded h3 { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded h3 { color: var(--vscode-walkthrough-stepTitle-foreground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded>.codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded > .codicon { cursor: pointer !important; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) { height: 48px; background: none; color: var(--vscode-descriptionForeground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded):hover { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded):hover { background: var(--vscode-welcomePage-tileHoverBackground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) .step-title { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) .step-title { white-space: nowrap; text-overflow: ellipsis; display: inline-block; @@ -452,66 +452,66 @@ width: inherit; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-title .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-title .codicon { position: relative; top: 2px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns .getting-started-detail-left>div { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-columns .getting-started-detail-left > div { width: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) .step-description-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step:not(.expanded) .step-description-container { visibility: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-container { width: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description { padding-top: 8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .actions { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .actions { margin-top: 12px; display: flex; align-items: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .shortcut-message { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .shortcut-message { display: flex; color: var(--vscode-descriptionForeground); font-size: 12px; margin-top: 12px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .shortcut-message .keybinding { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .shortcut-message .keybinding { font-weight: 600; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-next { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-next { margin-left: auto; margin-right: 10px; padding: 6px 12px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon.hidden { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon.hidden { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon-getting-started-step-unchecked, -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon-getting-started-step-checked { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon-getting-started-step-unchecked, +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon-getting-started-step-checked { margin-right: 8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step-action { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step-action { padding: 6px 12px; font-size: 13px; margin-bottom: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-left { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-left { min-width: 330px; width: 40%; max-width: 400px; @@ -519,15 +519,15 @@ flex-direction: column; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .full-height-scrollable { +.monaco-workbench .part.editor > .content .gettingStartedContainer .full-height-scrollable { height: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-container { height: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent { height: 100%; max-width: 1200px; margin: 0 auto; @@ -543,7 +543,7 @@ ". footer footer footer ."; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent { max-width: 500px; grid-template-columns: auto; grid-template-rows: 30px max-content minmax(30%, max-content) minmax(30%, 1fr) auto; @@ -551,45 +551,45 @@ grid-template-areas: "back" "title" "steps" "media" "footer"; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent.markdown { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent.markdown { grid-template-rows: 30px max-content minmax(30%, max-content) minmax(40%, 1fr) auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-semi-constrained.height-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-semi-constrained.height-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent { grid-template-rows: 0 max-content minmax(25%, max-content) minmax(25%, 1fr) auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.prev-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .prev-button { grid-area: back; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.getting-started-category { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .getting-started-category { grid-area: title; align-self: flex-end; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.steps-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .steps-container { height: 100%; grid-area: steps; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.getting-started-media { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .getting-started-media { grid-area: media; align-self: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent.markdown>.getting-started-media { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent.markdown > .getting-started-media { height: inherit; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent.image>.getting-started-media { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent.image > .getting-started-media { grid-area: title-start / media-start / steps-end / media-end; align-self: unset; display: flex; justify-content: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent.image>.getting-started-media { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-semi-constrained .gettingStartedSlideDetails .gettingStartedDetailsContent.image > .getting-started-media { grid-area: media; height: inherit; width: inherit; @@ -597,14 +597,14 @@ justify-content: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent>.getting-started-footer { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .getting-started-footer { grid-area: footer; align-self: flex-end; justify-self: center; text-align: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right { display: flex; align-items: flex-start; justify-content: center; @@ -615,36 +615,36 @@ max-width: 800px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .index-list.getting-started .button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer .index-list.getting-started .button-link { margin: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .index-list.getting-started .see-all-walkthroughs { +.monaco-workbench .part.editor > .content .gettingStartedContainer .index-list.getting-started .see-all-walkthroughs { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.someWalkthroughsHidden .index-list.getting-started .see-all-walkthroughs { +.monaco-workbench .part.editor > .content .gettingStartedContainer.someWalkthroughsHidden .index-list.getting-started .see-all-walkthroughs { display: inline; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.noExtensions .index-list.featured-extensions { +.monaco-workbench .part.editor > .content .gettingStartedContainer.noExtensions .index-list.featured-extensions { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.noWalkthroughs .index-list.getting-started { +.monaco-workbench .part.editor > .content .gettingStartedContainer.noWalkthroughs .index-list.getting-started { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right img { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right img { object-fit: contain; cursor: unset; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right img.clickable { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-detail-right img.clickable { cursor: pointer; } -.monaco-workbench .part.editor>.content .gettingStartedContainer button { +.monaco-workbench .part.editor > .content .gettingStartedContainer button { border: none; color: inherit; text-align: left; @@ -655,21 +655,21 @@ font-family: inherit; } -.monaco-workbench .part.editor>.content .gettingStartedContainer button:hover { +.monaco-workbench .part.editor > .content .gettingStartedContainer button:hover { cursor: pointer; } /* Don't show focus outline on mouse click. Instead only show outline on keyboard focus. */ -.monaco-workbench .part.editor>.content .gettingStartedContainer button:focus { +.monaco-workbench .part.editor > .content .gettingStartedContainer button:focus { outline: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer button:focus-visible { +.monaco-workbench .part.editor > .content .gettingStartedContainer button:focus-visible { outline: 1px solid var(--vscode-focusBorder); outline-offset: -1px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .prev-button.button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer .prev-button.button-link { position: absolute; left: 40px; top: 5px; @@ -679,91 +679,91 @@ display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.width-semi-constrained .prev-button.button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer.width-semi-constrained .prev-button.button-link { left: 0; top: -10px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained .prev-button.button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .prev-button.button-link { left: 0; top: -10px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained .prev-button.button-link .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .prev-button.button-link .codicon { font-size: 20px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer.height-constrained .prev-button.button-link .moreText { +.monaco-workbench .part.editor > .content .gettingStartedContainer.height-constrained .prev-button.button-link .moreText { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .prev-button:hover { +.monaco-workbench .part.editor > .content .gettingStartedContainer .prev-button:hover { cursor: pointer; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .prev-button .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .prev-button .codicon { position: relative; top: 3px; left: -4px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .button-link .codicon-arrow-right { +.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link .codicon-arrow-right { padding-left: 4px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .button-link .codicon-check-all { +.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link .codicon-check-all { padding-right: 4px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .skip { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .skip { display: block; margin: 2px auto; width: fit-content; text-align: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails h2 { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails h2 { font-size: 26px; font-weight: normal; margin: 0 0 8px 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails h2 .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails h2 .codicon { font-size: 20px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails h3 { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails h3 { font-size: 13px; font-weight: 600; margin: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .subtitle { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .subtitle { font-size: 16px; margin: 0; padding: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStarted.showCategories .gettingStartedSlideDetails { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStarted.showCategories .gettingStartedSlideDetails { left: 100%; opacity: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStarted.showDetails .gettingStartedSlideCategories { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStarted.showDetails .gettingStartedSlideCategories { left: -100%; opacity: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStarted.showDetails .categoriesScrollbar .scrollbar.vertical { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStarted.showDetails .categoriesScrollbar .scrollbar.vertical { display: none; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .done-next-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .done-next-container { display: flex; padding: 16px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link { padding: 0; background: transparent; margin: 2px; @@ -773,20 +773,20 @@ max-width: 100%; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .done-next-container .button-link { +.monaco-workbench .part.editor > .content .gettingStartedContainer .done-next-container .button-link { display: flex; align-items: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .button-link.next { +.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link.next { margin-left: auto; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .button-link:hover { +.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link:hover { background: transparent; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .openAWalkthrough>button, .monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .showOnStartup { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .openAWalkthrough > button, .monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .showOnStartup { text-align: center; display: flex; justify-content: center; @@ -794,7 +794,7 @@ gap: 8px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { color: inherit !important; height: 18px; width: 18px; @@ -805,45 +805,45 @@ } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox.codicon:not(.checked)::before { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox.codicon:not(.checked)::before { opacity: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.footer p { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .footer p { margin: 0; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer .index-list.start-container { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer .index-list.start-container { min-height: 156px; margin-bottom: 16px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideCategories>.gettingStartedCategoriesContainer>.footer>button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories > .gettingStartedCategoriesContainer > .footer > button { text-align: center; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .getting-started-category .codicon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .getting-started-category .codicon { top: 0px; } -.monaco-workbench .part.editor>.content .getting-started-category .codicon-star-full::before { +.monaco-workbench .part.editor > .content .getting-started-category .codicon-star-full::before { vertical-align: middle; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .hide-category-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .hide-category-button { visibility: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .getting-started-category:focus-within .hide-category-button, -.monaco-workbench .part.editor>.content .gettingStartedContainer .getting-started-category:hover .hide-category-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .getting-started-category:focus-within .hide-category-button, +.monaco-workbench .part.editor > .content .gettingStartedContainer .getting-started-category:hover .hide-category-button { visibility: visible; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container span { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container span { line-height: 1.3em; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container .monaco-button, .monaco-workbench .part.editor>.content .gettingStartedContainer .max-lines-3 { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container .monaco-button, .monaco-workbench .part.editor > .content .gettingStartedContainer .max-lines-3 { /* Supported everywhere: https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-line-clamp#browser_compatibility */ -webkit-line-clamp: 3; display: -webkit-box; @@ -851,7 +851,7 @@ overflow: hidden; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container .monaco-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .step-description-container .monaco-button { height: 24px; width: fit-content; display: flex; @@ -860,16 +860,16 @@ min-width: max-content; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .hide-category-button { +.monaco-workbench .part.editor > .content .gettingStartedContainer .hide-category-button { padding: 3px; border-radius: 5px; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .hide-category-button::before { +.monaco-workbench .part.editor > .content .gettingStartedContainer .hide-category-button::before { vertical-align: unset; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .hide-category-button:hover { +.monaco-workbench .part.editor > .content .gettingStartedContainer .hide-category-button:hover { background-color: var(--vscode-toolbar-hoverBackground); } @@ -980,26 +980,26 @@ background-color: var(--vscode-welcomePage-progress-foreground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { color: var(--vscode-activityBarBadge-foreground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured .featured-icon { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured .featured-icon { color: var(--vscode-activityBarBadge-foreground); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { background-color: var(--vscode-activityBarBadge-background); } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { background-color: var(--vscode-checkbox-background) !important; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { color: var(--vscode-checkbox-foreground) !important; } -.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { +.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlide .getting-started-checkbox { border-color: var(--vscode-checkbox-border) !important; } diff --git a/src/vs/workbench/contrib/welcomeWalkthrough/browser/media/walkThroughPart.css b/src/vs/workbench/contrib/welcomeWalkthrough/browser/media/walkThroughPart.css index 22cacd37226..ed362ff32c5 100644 --- a/src/vs/workbench/contrib/welcomeWalkthrough/browser/media/walkThroughPart.css +++ b/src/vs/workbench/contrib/welcomeWalkthrough/browser/media/walkThroughPart.css @@ -159,7 +159,7 @@ border-color: var(--vscode-contrastBorder); } -.monaco-workbench .part.editor>.content .walkThroughContent .monaco-editor-background, -.monaco-workbench .part.editor>.content .walkThroughContent .margin-view-overlays { +.monaco-workbench .part.editor > .content .walkThroughContent .monaco-editor-background, +.monaco-workbench .part.editor > .content .walkThroughContent .margin-view-overlays { background: var(--vscode-walkThrough-embeddedEditorBackground); } diff --git a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts index aedc4393850..3bb124ffa6f 100644 --- a/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts +++ b/src/vs/workbench/services/auxiliaryWindow/browser/auxiliaryWindowService.ts @@ -6,7 +6,7 @@ import { localize } from 'vs/nls'; import { mark } from 'vs/base/common/performance'; import { Emitter, Event } from 'vs/base/common/event'; -import { Dimension, EventHelper, EventType, ModifierKeyEmitter, addDisposableListener, cloneGlobalStylesheets, copyAttributes, createMetaElement, getActiveWindow, getClientArea, getWindowId, isGlobalStylesheet, position, registerWindow, sharedMutationObserver, size, trackAttributes } from 'vs/base/browser/dom'; +import { Dimension, EventHelper, EventType, ModifierKeyEmitter, addDisposableListener, cloneGlobalStylesheets, copyAttributes, createLinkElement, createMetaElement, getActiveWindow, getClientArea, getWindowId, isGlobalStylesheet, position, registerWindow, sharedMutationObserver, size, trackAttributes } from 'vs/base/browser/dom'; import { CodeWindow, ensureCodeWindow, mainWindow } from 'vs/base/browser/window'; import { Disposable, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; @@ -20,6 +20,7 @@ import Severity from 'vs/base/common/severity'; import { BaseWindow } from 'vs/workbench/browser/window'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { Barrier } from 'vs/base/common/async'; export const IAuxiliaryWindowService = createDecorator('auxiliaryWindowService'); @@ -45,6 +46,7 @@ export interface IAuxiliaryWindow extends IDisposable { readonly onDidLayout: Event; readonly onWillClose: Event; + readonly whenStylesHaveLoaded: Promise; readonly window: CodeWindow; readonly container: HTMLElement; @@ -63,13 +65,17 @@ export class AuxiliaryWindow extends BaseWindow implements IAuxiliaryWindow { private readonly _onWillDispose = this._register(new Emitter()); readonly onWillDispose = this._onWillDispose.event; + readonly whenStylesHaveLoaded: Promise; + constructor( readonly window: CodeWindow, readonly container: HTMLElement, + stylesHaveLoaded: Barrier, @IConfigurationService private readonly configurationService: IConfigurationService, ) { super(window); + this.whenStylesHaveLoaded = stylesHaveLoaded.wait().then(() => { }); this.registerListeners(); } @@ -83,7 +89,7 @@ export class AuxiliaryWindow extends BaseWindow implements IAuxiliaryWindow { })); this._register(addDisposableListener(this.window, EventType.RESIZE, () => { - const dimension = getClientArea(this.window.document.body); + const dimension = getClientArea(this.window.document.body, this.container); position(this.container, 0, 0, 0, 0, 'relative'); size(this.container, dimension.width, dimension.height); @@ -116,7 +122,7 @@ export class AuxiliaryWindow extends BaseWindow implements IAuxiliaryWindow { } layout(): void { - this._onDidLayout.fire(getClientArea(this.window.document.body)); + this._onDidLayout.fire(getClientArea(this.window.document.body, this.container)); } override dispose(): void { @@ -165,9 +171,9 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili ensureCodeWindow(targetWindow, resolvedWindowId); const containerDisposables = new DisposableStore(); - const container = this.createContainer(targetWindow, containerDisposables); + const { container, stylesLoaded } = this.createContainer(targetWindow, containerDisposables); - const auxiliaryWindow = this.createAuxiliaryWindow(targetWindow, container); + const auxiliaryWindow = this.createAuxiliaryWindow(targetWindow, container, stylesLoaded); const registryDisposables = new DisposableStore(); this.windows.set(targetWindow.vscodeWindowId, auxiliaryWindow); @@ -201,8 +207,8 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili return auxiliaryWindow; } - protected createAuxiliaryWindow(targetWindow: CodeWindow, container: HTMLElement): AuxiliaryWindow { - return new AuxiliaryWindow(targetWindow, container, this.configurationService); + protected createAuxiliaryWindow(targetWindow: CodeWindow, container: HTMLElement, stylesLoaded: Barrier): AuxiliaryWindow { + return new AuxiliaryWindow(targetWindow, container, stylesLoaded, this.configurationService); } private async openWindow(options?: IAuxiliaryWindowOpenOptions): Promise { @@ -257,13 +263,13 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili return BrowserAuxiliaryWindowService.WINDOW_IDS++; } - protected createContainer(auxiliaryWindow: CodeWindow, disposables: DisposableStore): HTMLElement { + protected createContainer(auxiliaryWindow: CodeWindow, disposables: DisposableStore): { stylesLoaded: Barrier; container: HTMLElement } { this.patchMethods(auxiliaryWindow); this.applyMeta(auxiliaryWindow); - this.applyCSS(auxiliaryWindow, disposables); - - return this.applyHTML(auxiliaryWindow, disposables); + const { stylesLoaded } = this.applyCSS(auxiliaryWindow, disposables); + const container = this.applyHTML(auxiliaryWindow, disposables); + return { stylesLoaded, container }; } protected patchMethods(auxiliaryWindow: CodeWindow): void { @@ -277,39 +283,66 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili } private applyMeta(auxiliaryWindow: CodeWindow): void { - const metaCharset = createMetaElement(auxiliaryWindow.document.head); - metaCharset.setAttribute('charset', 'utf-8'); + for (const metaTag of ['meta[charset="utf-8"]', 'meta[http-equiv="Content-Security-Policy"]', 'meta[name="viewport"]', 'meta[name="theme-color"]']) { + const metaElement = mainWindow.document.querySelector(metaTag); + if (metaElement) { + const clonedMetaElement = createMetaElement(auxiliaryWindow.document.head); + copyAttributes(metaElement, clonedMetaElement); - const originalCSPMetaTag = mainWindow.document.querySelector('meta[http-equiv="Content-Security-Policy"]'); - if (originalCSPMetaTag) { - const csp = createMetaElement(auxiliaryWindow.document.head); - copyAttributes(originalCSPMetaTag, csp); - - const content = csp.getAttribute('content'); - if (content) { - csp.setAttribute('content', content.replace(/(script-src[^\;]*)/, `script-src 'none'`)); + if (metaTag === 'meta[http-equiv="Content-Security-Policy"]') { + const content = clonedMetaElement.getAttribute('content'); + if (content) { + clonedMetaElement.setAttribute('content', content.replace(/(script-src[^\;]*)/, `script-src 'none'`)); + } + } } } + + const originalIconLinkTag = mainWindow.document.querySelector('link[rel="icon"]'); + if (originalIconLinkTag) { + const icon = createLinkElement(auxiliaryWindow.document.head); + copyAttributes(originalIconLinkTag, icon); + } } - protected applyCSS(auxiliaryWindow: CodeWindow, disposables: DisposableStore): void { + protected applyCSS(auxiliaryWindow: CodeWindow, disposables: DisposableStore) { mark('code/auxiliaryWindow/willApplyCSS'); const mapOriginalToClone = new Map(); - function cloneNode(originalNode: Node): void { + const stylesLoaded = new Barrier(); + stylesLoaded.wait().then(() => mark('code/auxiliaryWindow/didLoadCSSStyles')); + + let pendingLinkSettles = 0; + function onLinkSettled(_event?: globalThis.Event) { + // network errors from loading stylesheets will be written to the console + // already, we probably don't need to log them manually. + if (!--pendingLinkSettles) { + stylesLoaded.open(); + } + } + + function cloneNode(originalNode: Element): void { if (isGlobalStylesheet(originalNode)) { return; // global stylesheets are handled by `cloneGlobalStylesheets` below } const clonedNode = auxiliaryWindow.document.head.appendChild(originalNode.cloneNode(true)); + if (originalNode.tagName === 'LINK') { + pendingLinkSettles++; + disposables.add(addDisposableListener(clonedNode, 'load', onLinkSettled)); + disposables.add(addDisposableListener(clonedNode, 'error', onLinkSettled)); + } + mapOriginalToClone.set(originalNode, clonedNode); } // Clone all style elements and stylesheet links from the window to the child window + pendingLinkSettles++; // outer increment handles cases where there's nothing to load, and ensures it can't settle prematurely for (const originalNode of mainWindow.document.head.querySelectorAll('link[rel="stylesheet"], style')) { cloneNode(originalNode); } + onLinkSettled(); // Global stylesheets in are cloned in a special way because the mutation // observer is not firing for changes done via `style.sheet` API. Only text changes @@ -356,6 +389,8 @@ export class BrowserAuxiliaryWindowService extends Disposable implements IAuxili })); mark('code/auxiliaryWindow/didApplyCSS'); + + return { stylesLoaded }; } private applyHTML(auxiliaryWindow: CodeWindow, disposables: DisposableStore): HTMLElement { diff --git a/src/vs/workbench/services/auxiliaryWindow/electron-sandbox/auxiliaryWindowService.ts b/src/vs/workbench/services/auxiliaryWindow/electron-sandbox/auxiliaryWindowService.ts index 96b3075ad95..10251fbb2c9 100644 --- a/src/vs/workbench/services/auxiliaryWindow/electron-sandbox/auxiliaryWindowService.ts +++ b/src/vs/workbench/services/auxiliaryWindow/electron-sandbox/auxiliaryWindowService.ts @@ -18,6 +18,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { NativeWindow } from 'vs/workbench/electron-sandbox/window'; import { ShutdownReason } from 'vs/workbench/services/lifecycle/common/lifecycle'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { Barrier } from 'vs/base/common/async'; type NativeCodeWindow = CodeWindow & { readonly vscode: ISandboxGlobals; @@ -30,11 +31,12 @@ export class NativeAuxiliaryWindow extends AuxiliaryWindow { constructor( window: CodeWindow, container: HTMLElement, + stylesHaveLoaded: Barrier, @IConfigurationService configurationService: IConfigurationService, @INativeHostService private readonly nativeHostService: INativeHostService, @IInstantiationService private readonly instantiationService: IInstantiationService ) { - super(window, container, configurationService); + super(window, container, stylesHaveLoaded, configurationService); } protected override async confirmBeforeClose(e: BeforeUnloadEvent): Promise { @@ -73,7 +75,7 @@ export class NativeAuxiliaryWindowService extends BrowserAuxiliaryWindowService return windowId; } - protected override createContainer(auxiliaryWindow: NativeCodeWindow, disposables: DisposableStore): HTMLElement { + protected override createContainer(auxiliaryWindow: NativeCodeWindow, disposables: DisposableStore) { // Zoom level const windowConfig = this.configurationService.getValue(); @@ -100,8 +102,8 @@ export class NativeAuxiliaryWindowService extends BrowserAuxiliaryWindowService }; } - protected override createAuxiliaryWindow(targetWindow: CodeWindow, container: HTMLElement): AuxiliaryWindow { - return new NativeAuxiliaryWindow(targetWindow, container, this.configurationService, this.nativeHostService, this.instantiationService); + protected override createAuxiliaryWindow(targetWindow: CodeWindow, container: HTMLElement, stylesHaveLoaded: Barrier,): AuxiliaryWindow { + return new NativeAuxiliaryWindow(targetWindow, container, stylesHaveLoaded, this.configurationService, this.nativeHostService, this.instantiationService); } } diff --git a/src/vs/workbench/services/editor/browser/editorResolverService.ts b/src/vs/workbench/services/editor/browser/editorResolverService.ts index b8d99e5772a..91d1b7f6da9 100644 --- a/src/vs/workbench/services/editor/browser/editorResolverService.ts +++ b/src/vs/workbench/services/editor/browser/editorResolverService.ts @@ -83,13 +83,17 @@ export class EditorResolverService extends Disposable implements IEditorResolver }); } - private resolveUntypedInputAndGroup(editor: IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): [IUntypedEditorInput, IEditorGroup, EditorActivation | undefined] | undefined { + private resolveUntypedInputAndGroup(editor: IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): Promise<[IUntypedEditorInput, IEditorGroup, EditorActivation | undefined] | undefined> | [IUntypedEditorInput, IEditorGroup, EditorActivation | undefined] | undefined { const untypedEditor = editor; // Use the untyped editor to find a group - const [group, activation] = this.instantiationService.invokeFunction(findGroup, untypedEditor, preferredGroup); - - return [untypedEditor, group, activation]; + const findGroupResult = this.instantiationService.invokeFunction(findGroup, untypedEditor, preferredGroup); + if (findGroupResult instanceof Promise) { + return findGroupResult.then(([group, activation]) => [untypedEditor, group, activation]); + } else { + const [group, activation] = findGroupResult; + return [untypedEditor, group, activation]; + } } async resolveEditor(editor: IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): Promise { @@ -103,7 +107,14 @@ export class EditorResolverService extends Disposable implements IEditorResolver return this.doResolveSideBySideEditor(editor, preferredGroup); } - const resolvedUntypedAndGroup = this.resolveUntypedInputAndGroup(editor, preferredGroup); + let resolvedUntypedAndGroup: [IUntypedEditorInput, IEditorGroup, EditorActivation | undefined] | undefined; + const resolvedUntypedAndGroupResult = this.resolveUntypedInputAndGroup(editor, preferredGroup); + if (resolvedUntypedAndGroupResult instanceof Promise) { + resolvedUntypedAndGroup = await resolvedUntypedAndGroupResult; + } else { + resolvedUntypedAndGroup = resolvedUntypedAndGroupResult; + } + if (!resolvedUntypedAndGroup) { return ResolvedStatus.NONE; } @@ -265,11 +276,12 @@ export class EditorResolverService extends Disposable implements IEditorResolver getAllUserAssociations(): EditorAssociations { const inspectedEditorAssociations = this.configurationService.inspect<{ [fileNamePattern: string]: string }>(editorsAssociationsSettingId) || {}; + const defaultAssociations = inspectedEditorAssociations.defaultValue ?? {}; const workspaceAssociations = inspectedEditorAssociations.workspaceValue ?? {}; const userAssociations = inspectedEditorAssociations.userValue ?? {}; const rawAssociations: { [fileNamePattern: string]: string } = { ...workspaceAssociations }; - // We want to apply the user associations on top of the workspace associations but ignore duplicate keys. - for (const [key, value] of Object.entries(userAssociations)) { + // We want to apply the default associations and user associations on top of the workspace associations but ignore duplicate keys. + for (const [key, value] of Object.entries({ ...defaultAssociations, ...userAssociations })) { if (rawAssociations[key] === undefined) { rawAssociations[key] = value; } diff --git a/src/vs/workbench/services/editor/browser/editorService.ts b/src/vs/workbench/services/editor/browser/editorService.ts index 55a1329b41a..bba3ba994f9 100644 --- a/src/vs/workbench/services/editor/browser/editorService.ts +++ b/src/vs/workbench/services/editor/browser/editorService.ts @@ -540,7 +540,12 @@ export class EditorService extends Disposable implements EditorServiceImpl { // If group still isn't defined because of a disabled override we resolve it if (!group) { let activation: EditorActivation | undefined = undefined; - ([group, activation] = this.instantiationService.invokeFunction(findGroup, { editor: typedEditor, options }, preferredGroup)); + const findGroupResult = this.instantiationService.invokeFunction(findGroup, { editor: typedEditor, options }, preferredGroup); + if (findGroupResult instanceof Promise) { + ([group, activation] = await findGroupResult); + } else { + ([group, activation] = findGroupResult); + } // Mixin editor group activation if returned if (activation) { @@ -598,7 +603,12 @@ export class EditorService extends Disposable implements EditorServiceImpl { // If group still isn't defined because of a disabled override we resolve it if (!group) { - [group] = this.instantiationService.invokeFunction(findGroup, typedEditor, preferredGroup); + const findGroupResult = this.instantiationService.invokeFunction(findGroup, typedEditor, preferredGroup); + if (findGroupResult instanceof Promise) { + ([group] = await findGroupResult); + } else { + ([group] = findGroupResult); + } } // Update map of groups to editors diff --git a/src/vs/workbench/services/editor/common/editorGroupFinder.ts b/src/vs/workbench/services/editor/common/editorGroupFinder.ts index d2c24a3b112..bcae9ca0e58 100644 --- a/src/vs/workbench/services/editor/common/editorGroupFinder.ts +++ b/src/vs/workbench/services/editor/common/editorGroupFinder.ts @@ -9,26 +9,38 @@ import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation import { EditorInputWithOptions, isEditorInputWithOptions, IUntypedEditorInput, isEditorInput, EditorInputCapabilities } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor/editorInput'; import { IEditorGroup, GroupsOrder, preferredSideBySideGroupDirection, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { PreferredGroup, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; +import { AUX_WINDOW_GROUP, AUX_WINDOW_GROUP_TYPE, PreferredGroup, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; /** * Finds the target `IEditorGroup` given the instructions provided * that is best for the editor and matches the preferred group if * possible. */ -export function findGroup(accessor: ServicesAccessor, editor: IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): [IEditorGroup, EditorActivation | undefined]; -export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions, preferredGroup: PreferredGroup | undefined): [IEditorGroup, EditorActivation | undefined]; -export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): [IEditorGroup, EditorActivation | undefined]; -export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): [IEditorGroup, EditorActivation | undefined] { +export function findGroup(accessor: ServicesAccessor, editor: IUntypedEditorInput, preferredGroup: Exclude | undefined): [IEditorGroup, EditorActivation | undefined]; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions, preferredGroup: Exclude | undefined): [IEditorGroup, EditorActivation | undefined]; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: Exclude | undefined): [IEditorGroup, EditorActivation | undefined]; +export function findGroup(accessor: ServicesAccessor, editor: IUntypedEditorInput, preferredGroup: AUX_WINDOW_GROUP_TYPE): Promise<[IEditorGroup, EditorActivation | undefined]>; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions, preferredGroup: AUX_WINDOW_GROUP_TYPE): Promise<[IEditorGroup, EditorActivation | undefined]>; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: AUX_WINDOW_GROUP_TYPE): Promise<[IEditorGroup, EditorActivation | undefined]>; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): Promise<[IEditorGroup, EditorActivation | undefined]> | [IEditorGroup, EditorActivation | undefined]; +export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined): Promise<[IEditorGroup, EditorActivation | undefined]> | [IEditorGroup, EditorActivation | undefined] { const editorGroupService = accessor.get(IEditorGroupsService); const configurationService = accessor.get(IConfigurationService); const group = doFindGroup(editor, preferredGroup, editorGroupService, configurationService); + if (group instanceof Promise) { + return group.then(group => handleGroupActivation(group, editor, preferredGroup, editorGroupService)); + } + + return handleGroupActivation(group, editor, preferredGroup, editorGroupService); +} + +function handleGroupActivation(group: IEditorGroup, editor: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined, editorGroupService: IEditorGroupsService): [IEditorGroup, EditorActivation | undefined] { // Resolve editor activation strategy let activation: EditorActivation | undefined = undefined; if ( - editorGroupService.activeGroup !== group && // only if target group is not already active + editorGroupService.activeGroup !== group && // only if target group is not already active editor.options && !editor.options.inactive && // never for inactive editors editor.options.preserveFocus && // only if preserveFocus typeof editor.options.activation !== 'number' && // only if activation is not already defined (either true or false) @@ -49,8 +61,8 @@ export function findGroup(accessor: ServicesAccessor, editor: EditorInputWithOpt return [group, activation]; } -function doFindGroup(input: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined, editorGroupService: IEditorGroupsService, configurationService: IConfigurationService): IEditorGroup { - let group: IEditorGroup | undefined; +function doFindGroup(input: EditorInputWithOptions | IUntypedEditorInput, preferredGroup: PreferredGroup | undefined, editorGroupService: IEditorGroupsService, configurationService: IConfigurationService): Promise | IEditorGroup { + let group: Promise | IEditorGroup | undefined; const editor = isEditorInputWithOptions(input) ? input.editor : input; const options = input.options; @@ -78,6 +90,11 @@ function doFindGroup(input: EditorInputWithOptions | IUntypedEditorInput, prefer group = candidateGroup; } + // Group: Aux Window + else if (preferredGroup === AUX_WINDOW_GROUP) { + group = editorGroupService.createAuxiliaryEditorPart().then(group => group.activeGroup); + } + // Group: Unspecified without a specific index to open else if (!options || typeof options.index !== 'number') { const groupsByLastActive = editorGroupService.getGroups(GroupsOrder.MOST_RECENTLY_ACTIVE); diff --git a/src/vs/workbench/services/editor/common/editorService.ts b/src/vs/workbench/services/editor/common/editorService.ts index 02c7f12d809..1092fd870bc 100644 --- a/src/vs/workbench/services/editor/common/editorService.ts +++ b/src/vs/workbench/services/editor/common/editorService.ts @@ -28,7 +28,13 @@ export type ACTIVE_GROUP_TYPE = typeof ACTIVE_GROUP; export const SIDE_GROUP = -2; export type SIDE_GROUP_TYPE = typeof SIDE_GROUP; -export type PreferredGroup = IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE; +/** + * Open an editor in a new auxiliary window. + */ +export const AUX_WINDOW_GROUP = -3; +export type AUX_WINDOW_GROUP_TYPE = typeof AUX_WINDOW_GROUP; + +export type PreferredGroup = IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE; export function isPreferredGroup(obj: unknown): obj is PreferredGroup { const candidate = obj as PreferredGroup | undefined; @@ -233,10 +239,10 @@ export interface IEditorService { * @returns the editor that opened or `undefined` if the operation failed or the editor was not * opened to be active. */ - openEditor(editor: IResourceEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): Promise; - openEditor(editor: ITextResourceEditorInput | IUntitledTextResourceEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): Promise; - openEditor(editor: IResourceDiffEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): Promise; - openEditor(editor: IUntypedEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): Promise; + openEditor(editor: IResourceEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): Promise; + openEditor(editor: ITextResourceEditorInput | IUntitledTextResourceEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): Promise; + openEditor(editor: IResourceDiffEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): Promise; + openEditor(editor: IUntypedEditorInput, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): Promise; /** * @deprecated using this method is a sign that your editor has not adopted the editor @@ -250,7 +256,7 @@ export interface IEditorService { * If you already have an `EditorInput` in hand and must use it for opening, use `group.openEditor` * instead, via `IEditorGroupsService`. */ - openEditor(editor: EditorInput, options?: IEditorOptions, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE): Promise; + openEditor(editor: EditorInput, options?: IEditorOptions, group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE): Promise; /** * Open editors in an editor group. @@ -263,7 +269,7 @@ export interface IEditorService { * @returns the editors that opened. The array can be empty or have less elements for editors * that failed to open or were instructed to open as inactive. */ - openEditors(editors: IUntypedEditorInput[], group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE, options?: IOpenEditorsOptions): Promise; + openEditors(editors: IUntypedEditorInput[], group?: IEditorGroup | GroupIdentifier | SIDE_GROUP_TYPE | ACTIVE_GROUP_TYPE | AUX_WINDOW_GROUP_TYPE, options?: IOpenEditorsOptions): Promise; /** * Replaces editors in an editor group with the provided replacement. diff --git a/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts b/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts index e45c2d9a5ec..45eb9782709 100644 --- a/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts +++ b/src/vs/workbench/services/extensions/common/extensionsApiProposals.ts @@ -57,7 +57,6 @@ export const allApiProposals = Object.freeze({ idToken: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.idToken.d.ts', inlineCompletionsAdditions: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.inlineCompletionsAdditions.d.ts', interactive: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.interactive.d.ts', - interactiveUserActions: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts', interactiveWindow: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.interactiveWindow.d.ts', ipc: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.ipc.d.ts', languageStatusText: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.languageStatusText.d.ts', @@ -82,7 +81,6 @@ export const allApiProposals = Object.freeze({ saveEditor: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.saveEditor.d.ts', scmActionButton: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmActionButton.d.ts', scmHistoryProvider: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts', - scmInputBoxActionButton: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.ts', scmSelectedProvider: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmSelectedProvider.d.ts', scmTextDocument: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmTextDocument.d.ts', scmValidation: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.scmValidation.d.ts', diff --git a/src/vs/workbench/services/hover/browser/hoverWidget.ts b/src/vs/workbench/services/hover/browser/hoverWidget.ts index a3d6e9d8a02..a29612cb2d7 100644 --- a/src/vs/workbench/services/hover/browser/hoverWidget.ts +++ b/src/vs/workbench/services/hover/browser/hoverWidget.ts @@ -302,7 +302,8 @@ export class HoverWidget extends Widget { public render(container: HTMLElement): void { container.appendChild(this._hoverContainer); - const accessibleViewHint = getHoverAccessibleViewHint(this._configurationService.getValue('accessibility.verbosity.hover') === true && this._accessibilityService.isScreenReaderOptimized(), this._keybindingService.lookupKeybinding('editor.action.accessibleView')?.getAriaLabel()); + const hoverFocused = this._hoverContainer.contains(this._hoverContainer.ownerDocument.activeElement); + const accessibleViewHint = hoverFocused && getHoverAccessibleViewHint(this._configurationService.getValue('accessibility.verbosity.hover') === true && this._accessibilityService.isScreenReaderOptimized(), this._keybindingService.lookupKeybinding('editor.action.accessibleView')?.getAriaLabel()); if (accessibleViewHint) { status(accessibleViewHint); diff --git a/src/vs/workbench/services/label/test/browser/label.test.ts b/src/vs/workbench/services/label/test/browser/label.test.ts index 520ed89e35d..f5098c5df72 100644 --- a/src/vs/workbench/services/label/test/browser/label.test.ts +++ b/src/vs/workbench/services/label/test/browser/label.test.ts @@ -28,6 +28,8 @@ suite('URI Label', () => { labelService = new LabelService(TestEnvironmentService, new TestContextService(), new TestPathService(URI.file('/foobar')), new TestRemoteAgentService(), storageService, new TestLifecycleService()); }); + ensureNoDisposablesAreLeakedInTestSuite(); + test('custom scheme', function () { labelService.registerFormatter({ scheme: 'vscode', diff --git a/src/vs/workbench/services/output/common/output.ts b/src/vs/workbench/services/output/common/output.ts index 4ef30ef4e9d..012855aaaee 100644 --- a/src/vs/workbench/services/output/common/output.ts +++ b/src/vs/workbench/services/output/common/output.ts @@ -41,7 +41,7 @@ export const OUTPUT_VIEW_ID = 'workbench.panel.output'; export const CONTEXT_IN_OUTPUT = new RawContextKey('inOutput', false); -export const CONTEXT_ACTIVE_LOG_OUTPUT = new RawContextKey('activeLogOutput', false); +export const CONTEXT_ACTIVE_FILE_OUTPUT = new RawContextKey('activeLogOutput', false); export const CONTEXT_OUTPUT_SCROLL_LOCK = new RawContextKey(`outputView.scrollLock`, false); diff --git a/src/vs/workbench/services/suggest/browser/media/suggest.css b/src/vs/workbench/services/suggest/browser/media/suggest.css index 730b6fe66d5..366f7b7d6fd 100644 --- a/src/vs/workbench/services/suggest/browser/media/suggest.css +++ b/src/vs/workbench/services/suggest/browser/media/suggest.css @@ -69,8 +69,8 @@ margin-right: 0.3em; } -.monaco-workbench .workbench-suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore, -.monaco-workbench .workbench-suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore { +.monaco-workbench .workbench-suggest-widget.with-status-bar .monaco-list .monaco-list-row > .contents > .main > .right > .readMore, +.monaco-workbench .workbench-suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label > .contents > .main > .right > .readMore { display: none; } @@ -96,14 +96,14 @@ color: var(--vscode-editorSuggestWidget-selectedIconForeground); } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents { flex: 1; height: 100%; overflow: hidden; padding-left: 2px; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main { display: flex; overflow: hidden; text-overflow: ellipsis; @@ -111,12 +111,12 @@ justify-content: space-between; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left, -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left, +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { display: flex; } -.workbench-suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label { +.workbench-suggest-widget .monaco-list .monaco-list-row:not(.focused) > .contents > .main .monaco-icon-label { color: var(--vscode-editorSuggestWidget-foreground); } @@ -124,11 +124,11 @@ font-weight: bold; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-highlightForeground); } -.workbench-suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight { +.workbench-suggest-widget .monaco-list .monaco-list-row.focused > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-focusHighlightForeground); } @@ -154,14 +154,14 @@ color: var(--vscode-editorSuggestWidget-selectedIconForeground); } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents { flex: 1; height: 100%; overflow: hidden; padding-left: 2px; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main { display: flex; overflow: hidden; text-overflow: ellipsis; @@ -169,12 +169,12 @@ justify-content: space-between; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left, -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left, +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { display: flex; } -.workbench-suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label { +.workbench-suggest-widget .monaco-list .monaco-list-row:not(.focused) > .contents > .main .monaco-icon-label { color: var(--vscode-editorSuggestWidget-foreground); } @@ -182,11 +182,11 @@ font-weight: bold; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-highlightForeground); } -.workbench-suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight { +.workbench-suggest-widget .monaco-list .monaco-list-row.focused > .contents > .main .monaco-highlighted-label .highlight { color: var(--vscode-editorSuggestWidget-focusHighlightForeground); } @@ -197,7 +197,7 @@ text-decoration: unset; } -.workbench-suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container { +.workbench-suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated > .monaco-icon-label-container > .monaco-icon-name-container { text-decoration: line-through; } @@ -239,17 +239,17 @@ } /** signature, qualifier, type/details opacity **/ -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { opacity: 0.7; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .signature-label { overflow: hidden; text-overflow: ellipsis; opacity: 0.6; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .qualifier-label { margin-left: 12px; opacity: 0.4; font-size: 85%; @@ -261,7 +261,7 @@ /** Type Info and icon next to the label in the focused completion item **/ -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { font-size: 85%; margin-left: 1.1em; overflow: hidden; @@ -269,59 +269,59 @@ white-space: nowrap; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label > .monaco-tokenized-source { display: inline; } /** Details: if using CompletionItem#details, show on focus **/ -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .details-label { display: none; } -.workbench-suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label { +.workbench-suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused > .contents > .main > .right > .details-label { display: inline; } /** Details: if using CompletionItemLabel#details, always show **/ -.workbench-suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label, -.workbench-suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label { +.workbench-suggest-widget .monaco-list .monaco-list-row:not(.string-label) > .contents > .main > .right > .details-label, +.workbench-suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label) > .contents > .main > .right > .details-label { display: inline; } /** Ellipsis on hover **/ -.workbench-suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right.can-expand-details>.details-label { +.workbench-suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover > .contents > .main > .right.can-expand-details > .details-label { width: calc(100% - 26px); } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left { flex-shrink: 1; flex-grow: 1; overflow: hidden; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .monaco-icon-label { flex-shrink: 0; } -.workbench-suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label { +.workbench-suggest-widget .monaco-list .monaco-list-row:not(.string-label) > .contents > .main > .left > .monaco-icon-label { max-width: 100%; } -.workbench-suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label { +.workbench-suggest-widget .monaco-list .monaco-list-row.string-label > .contents > .main > .left > .monaco-icon-label { flex-shrink: 1; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right { overflow: hidden; flex-shrink: 4; max-width: 70%; } -.workbench-suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore { +.workbench-suggest-widget .monaco-list .monaco-list-row > .contents > .main > .right > .readMore { display: inline-block; position: absolute; right: 10px; diff --git a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts index 4ae7f6692c6..e546ab6c566 100644 --- a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts +++ b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts @@ -443,7 +443,8 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil try { const content = await this.textFileService.readStream(this.resource, { acceptTextOnly: !allowBinary, - etag, encoding: this.preferredEncoding, + etag, + encoding: this.preferredEncoding, limits: options?.limits }); diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts index 5780d63cce9..766081132c1 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorInput.ts @@ -19,6 +19,7 @@ import { ITextEditorOptions } from 'vs/platform/editor/common/editor'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; import { ITextModelService } from 'vs/editor/common/services/resolverService'; import { dispose, IReference } from 'vs/base/common/lifecycle'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; /** * An editor input to be used for untitled text buffers. @@ -47,9 +48,10 @@ export class UntitledTextEditorInput extends AbstractTextResourceEditorInput imp @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, @IPathService private readonly pathService: IPathService, @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, - @ITextModelService private readonly textModelService: ITextModelService + @ITextModelService private readonly textModelService: ITextModelService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(model.resource, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService); + super(model.resource, undefined, editorService, textFileService, labelService, fileService, filesConfigurationService, textResourceConfigurationService); this.registerModelListeners(model); } diff --git a/src/vs/workbench/services/userDataProfile/browser/media/userDataProfileView.css b/src/vs/workbench/services/userDataProfile/browser/media/userDataProfileView.css index ea08aa254b2..f5de028325f 100644 --- a/src/vs/workbench/services/userDataProfile/browser/media/userDataProfileView.css +++ b/src/vs/workbench/services/userDataProfile/browser/media/userDataProfileView.css @@ -7,43 +7,43 @@ display: inherit; } -.monaco-workbench .pane>.pane-body>.profile-view-message-container { +.monaco-workbench .pane > .pane-body > .profile-view-message-container { display: flex; padding: 13px 20px 0px 20px; box-sizing: border-box; } -.monaco-workbench .pane>.pane-body>.profile-view-message-container p { +.monaco-workbench .pane > .pane-body > .profile-view-message-container p { margin-block-start: 0em; margin-block-end: 0em; } -.monaco-workbench .pane>.pane-body>.profile-view-message-container a { +.monaco-workbench .pane > .pane-body > .profile-view-message-container a { color: var(--vscode-textLink-foreground) } -.monaco-workbench .pane>.pane-body>.profile-view-message-container a:hover { +.monaco-workbench .pane > .pane-body > .profile-view-message-container a:hover { text-decoration: underline; color: var(--vscode-textLink-activeForeground) } -.monaco-workbench .pane>.pane-body>.profile-view-message-container a:active { +.monaco-workbench .pane > .pane-body > .profile-view-message-container a:active { color: var(--vscode-textLink-activeForeground) } -.monaco-workbench .pane>.pane-body>.profile-view-message-container.hide { +.monaco-workbench .pane > .pane-body > .profile-view-message-container.hide { display: none; } -.monaco-workbench .pane>.pane-body>.profile-view-buttons-container { +.monaco-workbench .pane > .pane-body > .profile-view-buttons-container { display: flex; flex-direction: column; padding: 13px 20px; box-sizing: border-box; } -.monaco-workbench .pane>.pane-body>.profile-view-buttons-container>.monaco-button, -.monaco-workbench .pane>.pane-body>.profile-view-buttons-container>.monaco-button-dropdown { +.monaco-workbench .pane > .pane-body > .profile-view-buttons-container > .monaco-button, +.monaco-workbench .pane > .pane-body > .profile-view-buttons-container > .monaco-button-dropdown { margin-block-start: 13px; margin-inline-start: 0px; margin-inline-end: 0px; @@ -52,11 +52,11 @@ margin-right: auto; } -.monaco-workbench .pane>.pane-body>.profile-view-buttons-container>.monaco-button-dropdown { +.monaco-workbench .pane > .pane-body > .profile-view-buttons-container > .monaco-button-dropdown { width: 100%; } -.monaco-workbench .pane>.pane-body>.profile-view-buttons-container>.monaco-button-dropdown>.monaco-dropdown-button { +.monaco-workbench .pane > .pane-body > .profile-view-buttons-container > .monaco-button-dropdown > .monaco-dropdown-button { display: flex; align-items: center; padding: 0 4px; diff --git a/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopy.ts b/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopy.ts index 7a00e3208d8..aee59bce62b 100644 --- a/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopy.ts +++ b/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopy.ts @@ -7,7 +7,7 @@ import { localize } from 'vs/nls'; import { URI } from 'vs/base/common/uri'; import { Event, Emitter } from 'vs/base/common/event'; import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; -import { ETAG_DISABLED, FileOperationError, FileOperationResult, IFileService, IFileStatWithMetadata, IFileStreamContent, IWriteFileOptions, NotModifiedSinceFileOperationError } from 'vs/platform/files/common/files'; +import { ETAG_DISABLED, FileOperationError, FileOperationResult, IFileReadLimits, IFileService, IFileStatWithMetadata, IFileStreamContent, IWriteFileOptions, NotModifiedSinceFileOperationError } from 'vs/platform/files/common/files'; import { ISaveOptions, IRevertOptions, SaveReason } from 'vs/workbench/common/editor'; import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/workingCopyService'; import { IWorkingCopyBackup, IWorkingCopyBackupMeta, IWorkingCopySaveEvent, WorkingCopyCapabilities } from 'vs/workbench/services/workingCopy/common/workingCopy'; @@ -262,6 +262,12 @@ export interface IStoredFileWorkingCopyResolveOptions { * Go to disk bypassing any cache of the stored file working copy if any. */ readonly forceReadFromFile?: boolean; + + /** + * If provided, the size of the file will be checked against the limits + * and an error will be thrown if any limit is exceeded. + */ + readonly limits?: IFileReadLimits; } /** @@ -571,7 +577,10 @@ export class StoredFileWorkingCopy extend // Resolve Content try { - const content = await this.fileService.readFileStream(this.resource, { etag }); + const content = await this.fileService.readFileStream(this.resource, { + etag, + limits: options?.limits + }); // Clear orphaned state when resolving was successful this.setOrphaned(false); diff --git a/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts b/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts index cfdce4134e3..f76fdd404c7 100644 --- a/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts +++ b/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.ts @@ -475,7 +475,8 @@ export class StoredFileWorkingCopyManager const resolveOptions: IStoredFileWorkingCopyResolveOptions = { contents: options?.contents, - forceReadFromFile: options?.reload?.force + forceReadFromFile: options?.reload?.force, + limits: options?.limits }; // Working copy exists diff --git a/src/vs/workbench/test/browser/parts/editor/resourceEditorInput.test.ts b/src/vs/workbench/test/browser/parts/editor/resourceEditorInput.test.ts index f44f395fac6..7481879807d 100644 --- a/src/vs/workbench/test/browser/parts/editor/resourceEditorInput.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/resourceEditorInput.test.ts @@ -14,6 +14,7 @@ import { EditorInputCapabilities, Verbosity } from 'vs/workbench/common/editor'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; +import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfiguration'; suite('ResourceEditorInput', () => { @@ -28,9 +29,10 @@ suite('ResourceEditorInput', () => { resource: URI, @ILabelService labelService: ILabelService, @IFileService fileService: IFileService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, + @ITextResourceConfigurationService textResourceConfigurationService: ITextResourceConfigurationService ) { - super(resource, resource, labelService, fileService, filesConfigurationService); + super(resource, resource, labelService, fileService, filesConfigurationService, textResourceConfigurationService); } } diff --git a/src/vs/workbench/test/browser/window.test.ts b/src/vs/workbench/test/browser/window.test.ts index e2ffc2a359a..eabf5661cfc 100644 --- a/src/vs/workbench/test/browser/window.test.ts +++ b/src/vs/workbench/test/browser/window.test.ts @@ -20,6 +20,8 @@ suite('Window', () => { constructor(window: CodeWindow, dom: { getWindowsCount: () => number; getWindows: () => Iterable }) { super(window, dom); } + + protected override enableWindowFocusOnElementFocus(): void { } } test('multi window aware setTimeout()', async function () { diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index c3d93488f4d..ca32d3629f8 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -593,6 +593,7 @@ export class TestLayoutService implements IWorkbenchLayoutService { activeContainerDimension: IDimension = { width: 800, height: 600 }; mainContainerOffset: ILayoutOffsetInfo = { top: 0, quickPickTop: 0 }; activeContainerOffset: ILayoutOffsetInfo = { top: 0, quickPickTop: 0 }; + whenActiveContainerStylesLoaded = Promise.resolve(); mainContainer: HTMLElement = mainWindow.document.body; containers = [mainWindow.document.body]; diff --git a/src/vscode-dts/vscode.proposed.chatAgents2Additions.d.ts b/src/vscode-dts/vscode.proposed.chatAgents2Additions.d.ts index 1e0684cd03c..2ad0993986f 100644 --- a/src/vscode-dts/vscode.proposed.chatAgents2Additions.d.ts +++ b/src/vscode-dts/vscode.proposed.chatAgents2Additions.d.ts @@ -5,11 +5,6 @@ declare module 'vscode' { - export interface ChatAgentUserActionEvent { - readonly result: ChatAgentResult2; - readonly action: InteractiveSessionCopyAction | InteractiveSessionInsertAction | InteractiveSessionTerminalAction | InteractiveSessionCommandAction | InteractiveSessionFollowupAction | InteractiveSessionBugReportAction; - } - export interface ChatAgent2 { onDidPerformAction: Event; supportIssueReporting?: boolean; @@ -77,4 +72,61 @@ declare module 'vscode' { */ export function createChatAgent(name: string, handler: ChatAgentExtendedHandler): ChatAgent2; } + + /* + * User action events + */ + + export enum ChatAgentCopyKind { + // Keyboard shortcut or context menu + Action = 1, + Toolbar = 2 + } + + export interface ChatAgentCopyAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'copy'; + codeBlockIndex: number; + copyKind: ChatAgentCopyKind; + copiedCharacters: number; + totalCharacters: number; + copiedText: string; + } + + export interface ChatAgentInsertAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'insert'; + codeBlockIndex: number; + totalCharacters: number; + newFile?: boolean; + } + + export interface ChatAgentTerminalAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'runInTerminal'; + codeBlockIndex: number; + languageId?: string; + } + + export interface ChatAgentCommandAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'command'; + command: ChatAgentCommandFollowup; + } + + export interface ChatAgentSessionFollowupAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'followUp'; + followup: ChatAgentReplyFollowup; + } + + export interface ChatAgentBugReportAction { + // eslint-disable-next-line local/vscode-dts-string-type-literals + kind: 'bug'; + } + + export interface ChatAgentUserActionEvent { + readonly result: ChatAgentResult2; + readonly action: ChatAgentCopyAction | ChatAgentInsertAction | ChatAgentTerminalAction | ChatAgentCommandAction | ChatAgentSessionFollowupAction | ChatAgentBugReportAction; + } } diff --git a/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts b/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts deleted file mode 100644 index c4f89f80bbe..00000000000 --- a/src/vscode-dts/vscode.proposed.interactiveUserActions.d.ts +++ /dev/null @@ -1,77 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -declare module 'vscode' { - - export enum InteractiveSessionVoteDirection { - Down = 0, - Up = 1 - } - - export interface InteractiveSessionVoteAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'vote'; - direction: InteractiveSessionVoteDirection; - } - - export enum InteractiveSessionCopyKind { - // Keyboard shortcut or context menu - Action = 1, - Toolbar = 2 - } - - export interface InteractiveSessionCopyAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'copy'; - codeBlockIndex: number; - copyType: InteractiveSessionCopyKind; - copiedCharacters: number; - totalCharacters: number; - copiedText: string; - } - - export interface InteractiveSessionInsertAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'insert'; - codeBlockIndex: number; - totalCharacters: number; - newFile?: boolean; - } - - export interface InteractiveSessionTerminalAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'runInTerminal'; - codeBlockIndex: number; - languageId?: string; - } - - export interface InteractiveSessionCommandAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'command'; - command: InteractiveResponseCommand; - } - - export interface InteractiveSessionFollowupAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'followUp'; - followup: InteractiveSessionReplyFollowup; - } - - export interface InteractiveSessionBugReportAction { - // eslint-disable-next-line local/vscode-dts-string-type-literals - kind: 'bug'; - } - - export type InteractiveSessionUserAction = InteractiveSessionVoteAction | InteractiveSessionCopyAction | InteractiveSessionInsertAction | InteractiveSessionTerminalAction | InteractiveSessionCommandAction | InteractiveSessionBugReportAction; - - export interface InteractiveSessionUserActionEvent { - action: InteractiveSessionUserAction; - providerId: string; - } - - export namespace interactive { - export const onDidPerformUserAction: Event; - } -} diff --git a/src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.ts b/src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.ts deleted file mode 100644 index 890cadaab91..00000000000 --- a/src/vscode-dts/vscode.proposed.scmInputBoxActionButton.d.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. - *--------------------------------------------------------------------------------------------*/ - -declare module 'vscode' { - // https://github.com/microsoft/vscode/issues/195474 - - export interface SourceControlInputBoxActionButton { - readonly command: Command; - readonly enabled: boolean; - readonly icon?: Uri | { light: Uri; dark: Uri } | ThemeIcon; - } - - export interface SourceControlInputBox { - actionButton?: SourceControlInputBoxActionButton; - } - -} diff --git a/test/unit/browser/index.js b/test/unit/browser/index.js index 304579792ee..322e5b7d510 100644 --- a/test/unit/browser/index.js +++ b/test/unit/browser/index.js @@ -26,6 +26,7 @@ const minimist = require('minimist'); * @type {{ * run: string; * grep: string; + * runGlob: string; * browser: string; * reporter: string; * 'reporter-options': string; @@ -38,7 +39,7 @@ const minimist = require('minimist'); */ const args = minimist(process.argv.slice(2), { boolean: ['build', 'debug', 'sequential', 'help'], - string: ['run', 'grep', 'browser', 'reporter', 'reporter-options', 'tfs'], + string: ['run', 'grep', 'runGlob', 'browser', 'reporter', 'reporter-options', 'tfs'], default: { build: false, browser: ['chromium', 'firefox', 'webkit'], @@ -47,6 +48,7 @@ const args = minimist(process.argv.slice(2), { }, alias: { grep: ['g', 'f'], + runGlob: ['glob', 'runGrep'], debug: ['debug-browser'], help: 'h' }, @@ -125,7 +127,7 @@ const testModules = (async function () { } else { // glob patterns (--glob) const defaultGlob = '**/*.test.js'; - const pattern = args.run || defaultGlob; + const pattern = args.runGlob || defaultGlob; isDefaultModules = pattern === defaultGlob; promise = new Promise((resolve, reject) => { diff --git a/test/unit/electron/renderer.js b/test/unit/electron/renderer.js index e271c1e78ae..e1e826be4b6 100644 --- a/test/unit/electron/renderer.js +++ b/test/unit/electron/renderer.js @@ -195,7 +195,6 @@ function loadTests(opts) { 'issue #149130: vscode freezes because of Bracket Pair Colorization', // https://github.com/microsoft/vscode/issues/192440 'property limits', // https://github.com/microsoft/vscode/issues/192443 'Error events', // https://github.com/microsoft/vscode/issues/192443 - 'Ensure output channel is logged to', // https://github.com/microsoft/vscode/issues/192443 'guards calls after runs are ended' // https://github.com/microsoft/vscode/issues/192468 ]); diff --git a/yarn.lock b/yarn.lock index 149984b4ad6..27aba72196e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3565,10 +3565,10 @@ electron-to-chromium@^1.4.202: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.207.tgz#9c3310ebace2952903d05dcaba8abe3a4ed44c01" integrity sha512-piH7MJDJp4rJCduWbVvmUd59AUne1AFBJ8JaRQvk0KzNTSUnZrVXHCZc+eg+CGE4OujkcLJznhGKD6tuAshj5Q== -electron@25.9.6: - version "25.9.6" - resolved "https://registry.yarnpkg.com/electron/-/electron-25.9.6.tgz#424b6b5ce24a7329ac0edf915b9fbd0732b7f630" - integrity sha512-vddWieRqlAFOTNZDwHwD8/3dRua8dpob6zZOUurO8y5JcFjA5/Kl2dbU6nwq/LI5BAS/6lg575xNZTJfOVwCmA== +electron@25.9.7: + version "25.9.7" + resolved "https://registry.yarnpkg.com/electron/-/electron-25.9.7.tgz#d6baa370ea334f0ead48d543f5f6c764e05fdaca" + integrity sha512-8aejD8NricfzeoUflPPpDU7M6yEppQyASoZBT7qgiKnEy6+M3SgetZNEmkoHMGK/NNxP8GcO5lRuvCyegI1mig== dependencies: "@electron/get" "^2.0.0" "@types/node" "^18.11.18"